Destruktor a obiekty klasy podrzędnej
Ostatnio zmodyfikowano 2014-12-21 20:51
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? 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 ); } 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(); }; 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. |
|
1aam2am1 |
» 2014-12-21 19:59:29 Usuwaj każdy obiekt pojedyńczo |
|
lurch92 Temat założony przez niniejszego użytkownika |
» 2014-12-21 20:09:57 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. |
|
michal11 |
» 2014-12-21 20:37:47 Zamiast jawnego wywoływania destruktorów powinno być for( i = 0; i < 5; i++ ) { delete moneta[ i ]; }
|
|
lurch92 Temat założony przez niniejszego użytkownika |
» 2014-12-21 20:51:37 W tym przypadku program się zawiesza. |
|
« 1 » |