Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Zmiana zawartości wskaźnika przez metodę

Ostatnio zmodyfikowano 2016-01-28 11:55
Autor Wiadomość
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:
C/C++
#include<iostream>

using namespace std;
class Wilk;
class Niedzwiedz;

class Postac {
protected:
    string forma;
public:
    void Opisz(); //Wypisuje aktualna forme
    virtual void ZmianaFormy( Postac * wsk, Wilk & w, Niedzwiedz & n ) = 0; // Zmienia Wilka w Niedzwiedzia i odwrotnie
};

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::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::Niedzwiedz( int s, int z ) {
    forma = "Niedzwiedz";
}
void Niedzwiedz::ZmianaFormy( Postac * wsk, Wilk & w, Niedzwiedz & n ) {
    cout << "Chcesz sie zmienic w ..." << endl;
    wsk = & w;
}
//=========================MAIN========================================
int main() {
    Postac * wsk;
    Wilk w;
    Niedzwiedz n;
    wsk = & n;
    wsk->ZmianaFormy( wsk, w, n );
    wsk->Opisz();
}
P-144090
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).
P-144093
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.
P-144094
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.
P-144095
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.
P-144101
« 1 »
  Strona 1 z 1