Zmiana zawartości wskaźnika przez metodę
Ostatnio zmodyfikowano 2016-01-28 11:55
Matei Temat założony przez niniejszego użytkownika |
Zmiana zawartości wskaźnika przez metodę » 2016-01-28 00:11:08 Nie wiem jak zmienić zawartość wskaźnika przez metodę. Kiedy wykonuję metodę ZmianaFormy() wskaźnik zmienia swoją wartość jedynie w tej metodzie, a chcę żeby zmienił ją także oryginalny wskaźnik. Tak wygląda mój kod: #include<iostream>
using namespace std; class Wilk; class Niedzwiedz;
class Postac { protected: string forma; public: void Opisz(); virtual void ZmianaFormy( Postac * wsk, Wilk & w, Niedzwiedz & n ) = 0; };
class Wilk : public Postac { public: virtual void ZmianaFormy( Postac * wsk, Wilk & w, Niedzwiedz & n ); Wilk( int s = 1, int z = 1 ); };
class Niedzwiedz : public Postac { public: virtual void ZmianaFormy( Postac * wsk, Wilk & w, Niedzwiedz & n ); Niedzwiedz( int s = 1, int z = 1 ); }; void Postac::Opisz() { cout << "OPIS POSTACI" << endl; cout << "------------------------" << endl; cout << "Aktualna forma: " << forma << endl; }
Wilk::Wilk( int s, int z ) { forma = "Wilk"; } void Wilk::ZmianaFormy( Postac * wsk, Wilk & w, Niedzwiedz & n ) { cout << "Chcesz sie zmienic w ..." << endl; wsk = & n; }
Niedzwiedz::Niedzwiedz( int s, int z ) { forma = "Niedzwiedz"; } void Niedzwiedz::ZmianaFormy( Postac * wsk, Wilk & w, Niedzwiedz & n ) { cout << "Chcesz sie zmienic w ..." << endl; wsk = & w; }
int main() { Postac * wsk; Wilk w; Niedzwiedz n; wsk = & n; wsk->ZmianaFormy( wsk, w, n ); wsk->Opisz(); }
|
|
jankowalski25 |
» 2016-01-28 00:31:04 Za pomocą wskaźnika możesz zmienić wartość zmiennej. Aby zmienić wartość wskaźnika, potrzebujesz wskaźnika do tego wskaźnika (podwójna gwiazdka). |
|
Matei Temat założony przez niniejszego użytkownika |
» 2016-01-28 01:14:38 Mógłbyś przerobić podany przeze mnie kod wykorzystując ten dwugwiazdkowy wskaźnik, albo chociaż podać jakiś prosty przykład? Ponieważ szukałem trochę w necie i nie znalazłem nic zadowalającego. |
|
michal11 |
» 2016-01-28 01:22:51 virtual void ZmianaFormy( Postac *& wsk, Wilk & w, Niedzwiedz & n ) = 0; tak spróbuj, ew. virtual void ZmianaFormy( Postac ** wsk, Wilk & w, Niedzwiedz & n ) = 0; ale wtedy musisz też zmienić trochę ciało funkcji. |
|
Matei Temat założony przez niniejszego użytkownika |
» 2016-01-28 11:55:08 Udało mi się to zrobić tworząc coś takiego Postac * & wsk, Wilk & w, Niedzwiedz & n Co do dwugwiazdkowych wskaźników to nadal trochę nie ogarniam, ale cieszę się że dowiedziałem się o czymś takim. Wszystkim dziękuję za pomoc. |
|
« 1 » |