Zmiana wartości zmiennej rodzica w klasie pochodnej
Ostatnio zmodyfikowano 2012-11-07 22:35
wiktor12348 Temat założony przez niniejszego użytkownika |
Zmiana wartości zmiennej rodzica w klasie pochodnej » 2012-11-07 21:55:17 Witam Nie mogę znaleźć odpowiedzi na swoje pytanie. Najprawdopodobniej źle szukam. Mam 2 klasy. figura i trojkat. Klasa trojkat dziedziczy po klasie figura. W klasie figura jest zmienna "q". Ona odpowiedzialna jest w kilku metodach za dzielnik oraz pomaga konstruktorowi figury stworzyć dynamiczną tablice dwuwymiarową - ale to chyba mało ważne. Muszę w klasie trojkat zmienić wartość q. Generalnie w kolejnych klasa też które dopiero stworzę. Mam takie coś: class figura { public: int q; }; class trojkat : public figura { public: float a, b, c; int q = 3; }; Bawiłem się static const oraz próbowałem przekazać wartość przez konstruktor trojkąta oraz przez nadpisywanie zmiennych. Nie udało się, albo wywalał błąd lub q=160454.... Dziękuje za pomoc. |
|
Mrovqa |
» 2012-11-07 22:02:02 class figura { public: int q; }; class trojkat : public figura { public: float a, b, c; trojkat() : q( 3 ) { } }; Składniki inicjalizuje się w konstruktorze. |
|
wiktor12348 Temat założony przez niniejszego użytkownika |
» 2012-11-07 22:09:29 Niestety, źle to chyba nadal używam. trojkat() : q( 3 ) { zapytaj(); przydziel_boki(); punkty_wyswietl(); pole_wyswietl(); obwod_wyswietl(); }
Dawałem też: trojkat() { q( 3 ); zapytaj(); przydziel_boki(); punkty_wyswietl(); pole_wyswietl(); obwod_wyswietl(); }
Tak jakoś nie działa... |
|
akwes |
» 2012-11-07 22:13:17 a ? Inicjalizowanie powinno działać... ale nie wgryzałem się w kod. Najlepiej poda log kompilacji jeszcze. ( korzystaj z tagów [cpp] kod [/cpp] ) |
|
wiktor12348 Temat założony przez niniejszego użytkownika |
» 2012-11-07 22:20:01 Dzięki za tag. Jak dałem class trojkat : public figura { public: float a, b, c; trojkat() { figura::q = 3; ...
Skompilował ale niestety wywalił błąd przy tworzeniu tablic dynamicznych a sam q miał wartość ponad 20k |
|
akwes |
» 2012-11-07 22:29:47 Chyba już wiem w czym problem. Twoja klasa rodzic po prostu używa tego "q" do stworzenia tablicy dynamicznej? (jakbyś dał cały kod to by było jasne) Więc to "q" musi zostać zainicjalizowane zanim zostanie wywołany konstruktor (w tym przypadku pewnie domyślny) klasy rodzica. Czyli najpewniej będzie to coś na wzór class figura { public: int q; figura( int var1 ) { q = var1; } };
class trojkat : public figura { public: trojkat( int a ) : figura( a ) { } trojkat() : figura( 3 ) { } };
|
|
wiktor12348 Temat założony przez niniejszego użytkownika |
» 2012-11-07 22:35:59 Tak jest! Dzięki Ci dobry człowieku! class figura { public: int q; int ** wierzcholki; figura( int qq ) { q = qq; wierzcholki = new int *[ q ]; for( int j = 0; j < q; j++ ) wierzcholki[ j ] = new int[ 2 ]; } ~figura() { for( int j = 0; j < q; j++ ) delete[] wierzcholki[ j ]; delete[] wierzcholki; } ... ... class trojkat : public figura { public: float a, b, c; trojkat() : figura( 3 ) { zapytaj(); przydziel_boki(); punkty_wyswietl(); pole_wyswietl(); obwod_wyswietl(); } ...
Teraz działa, może komuś zagubionemu wśród ciemności tak jak ja, kod się przyda :) |
|
« 1 » |