C++ wskaźnik (**) bazowej na wskaźnik (*) pochodnej


(Witos) #1

Witam otóż mam następujący problem a nawet nie wiem pod jakim hasłem szukać gdziekolwiek rozwiązania.

Wiadomo że jeśli mam klasę bazową Baza i jej pochodną Pochodna dziedziczącą poprzez public: to taki zapis:

Baza* x = new Pochodna[10];

będzie poprawny i ładnie się to skompiluje. A czy da się uzyskać coś podobnego do tego?:

Baza** x = new Pochodna* [10]

Przy próbie kompilacji wyrzuca mi info o invalid conversion... Jak się z czymś takim uporać?

Kompilator g++ 4.2 / linux


(system) #2

To jest zabezpieczenie przed przypadkami:

class Baza1 { public: int b1; Baza1(int b1=0):b1(b1) {} };

class Baza { public: int b; Baza(int b=0):b(b) {} };

class Pochodna:public Baza1,public Baza { public: int p; Pochodna(int p=0,int b1=0,int b=0):Baza1(b1),Baza(b),p(p) {} };

w takim przypadku nie wiadomo co ma oznaczać podwójny wskaźnik, nie wiadomo w którym momencie zrobić przeskok wskaźnika this: jeżeli nie masz wielokrotnego dziedziczenia to:

Baza** y = reinterpret_cast(new Pochodna*[10]);

lub

Baza** z = &(Baza*)*(new Pochodna*[10]);

chociaż nie wszystkie kompilatory radzą sobie z tym ostatnim.