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

Destruktor a obiekty klasy podrzędnej

Ostatnio zmodyfikowano 2014-12-21 20:51
Autor Wiadomość
lurch92
Temat założony przez niniejszego użytkownika
Destruktor a obiekty klasy podrzędnej
» 2014-12-21 19:53:13
Witam,
mam następujący problem:
mam klasę Labirynt która ma pięć obiektów klasy Moneta. Klasa Moneta posiada pozycję x i y oraz statyczną wartość ilość (ilość monet);
Teraz w konstruktorze klasy Labirynt tworzę pięć obiektów Moneta. I teraz jak w destruktorze ~Labirynt usunąć te wszyskie monety?

C/C++
srand( time( NULL ) );
for( i = 0; i < 5; i++ )
{
   
    int losowe_x = 0;
    int losowe_y = 0;
   
    while(( plansza[ losowe_x ][ losowe_y ] == SCIANA ) ||
    ( plansza[ losowe_x ][ losowe_y ] == GRACZ ) ||
    ( plansza[ losowe_x ][ losowe_y ] == META ) )
    {
        losowe_x =( rand() %( wysokosc - 2 ) ) + 1;
        losowe_y =( rand() %( szerokosc - 2 ) ) + 1;
    }
    moneta[ i ] = new Moneta( losowe_x, losowe_y );
}

C/C++
class Moneta
    : public ElementGry
{
private:
    static int ilosc;
public:
    char symbol;
    Moneta( int, int );
    ~Moneta();
    void Usun_monete( int );
    int Ilosc();
    virtual int Podaj_x();
    virtual int Podaj_y();
};

C/C++
int Moneta::ilosc = 0;

Moneta::Moneta( int x, int y )
    : ElementGry( x, y )
     , symbol( MONETA )
{
    ilosc++;
}

int Moneta::Ilosc()
{
    return ilosc;
}

int Moneta::Podaj_y()
{
    return poz_y;
}
int Moneta::Podaj_x()
{
    return poz_x;
}

void Moneta::Usun_monete( int x )
{
    ilosc -= x;
}

Moneta::~Moneta()
{
   
}

delete [] moneta nie działa, program po prostu się zatrzymuje, nie podaje błędu ale blokuje konsole.
Bardzo bym prosił o pomoc.
P-123204
1aam2am1
» 2014-12-21 19:59:29
Usuwaj każdy obiekt pojedyńczo
P-123205
lurch92
Temat założony przez niniejszego użytkownika
» 2014-12-21 20:09:57
C/C++
moneta[ 0 ]->~Moneta();
moneta[ 1 ]->~Moneta();
moneta[ 2 ]->~Moneta();
moneta[ 3 ]->~Moneta();
moneta[ 4 ]->~Moneta();

Tak poszło. Ale mam problem ze wartością ilości monet. Przy konstruktorze monety jest ilosc++. To czy w destruktorze Moneta powinno byc ilosc--? Jeśli tak zrobię to przy tworzeniu nowego obiektu Labirynt, wartość ilości monet równa się 0. Jeśli zaś nie dodam ilosc-- do destrutktora monety to mam 10, czyli 2x więcej.
P-123206
michal11
» 2014-12-21 20:37:47
Zamiast jawnego wywoływania destruktorów powinno być

C/C++
for( i = 0; i < 5; i++ )
{
    delete moneta[ i ];
}
P-123207
lurch92
Temat założony przez niniejszego użytkownika
» 2014-12-21 20:51:37
W tym przypadku program się zawiesza.
P-123208
« 1 »
  Strona 1 z 1