Wielodziedziczenie brak przypisania wartości zmiennym

0

Cześć potrzebuję pomocy z wielodziedziczeniem.
Pewnie jest to jakaś błacha sprawa.
Jeżeli usunę słowa "virtual" i zostawię w mainie tylko NODE_COORD_COM ob1(2.3, 2.1, "ob1"); ob1.disp();
Zmiennym pcoord zostają przypisane odpowiednie wartości.
Wszystko działa ok. Jednak virtual potrzebne jest żeby wykonały się polecenia związane z wskaźnikiem.
Jeżeli wszystko zostaje tak jak jest w kodzie. Wskaźnik pcoord z klasy NODE_COORD dostaje NULL.
Zauważyłem w pracy krokowej że wchodzi do konstruktora domyślnego klasy NODE_COORD.
Nie wiem czemu tak się dzieje.
Jak to można poprawić?

Kod z nagłówków klas i funkcja main:

http://pastebin.com/nkGQWuw1

Z góry dzięki ;)

0

Ponieważ w przypadku wirtualnego dziedziczenia konstruktor klasy dziedziczący cześć wirtualną więcej niż raz musi zainicjować tą część wirtualną we własnym konstruktorze, przed wywołaniem konstruktorów klas które tą część zawierają.

0

Dzięki!
Pomogło. Zamieniłem linijkę:
NODE_COORD_COM(double x, double y, string txt) : NODE_COORD_DES(x, y, txt) { counter++; }
Na:
NODE_COORD_COM(double x, double y, string txt) : NODE_COORD_DES(x, y, txt), NODE_COORD(x,y) { counter++; }
I teraz działa.
O to chodziło. To jest poprawnie zrobione?

0

Nie, komunikaty jesteś w stanie przeczytać?

0

Hmm jakie komunikaty?
Wszystko wygląda ok. Działa tak jak powinno. Przynajmniej według mnie.

W konsoli tak się wyświetla:

KONSTRUKTOR SPARAMETRYZOWANY

Liczba utworzonych obiektow 1

Opis punktu i wspolrzedne ob1 2.3 2.1

Liczba utworzonych obiektow 1

Opis punktu i wspolrzedne ob1 2.3 2.1

0

Przyzwoite kompilatory dają ostrzeżenie.
Cześć wirtualna ma być pierwsza na liście inicjalizacyjnej.

1 użytkowników online, w tym zalogowanych: 0, gości: 1