Witam, myślałem że tym razem obejdzie się bez większych problemów ale C++ znowu stawia mi figle których ja nie potrafię zrozumieć ;( Mam taki banalny przykład dziedziczenia:
class A {
int a;
public:
A(int v) : a(v) {}
int& returna() {
return a;
}
};
class B : public A {
int b;
public:
B(int v1, int v2) : A(v1), b(v2) {}
int& returnb() {
return b;
}
};
I takie dynamiczne przydzielenie:
A* aaa = new B(1,2);
Odwołanie się:
aaa->returna();
Jest poprawne, ale:
aaa->returnb();
Powoduje błąd kompilacji że klasa 'A' nie posiada takiej metody. Ale zaraz, przecież wskaźnik klasy 'A' wskazuje na dynamicznie przydzielony obiekt pamięci klasy 'B'.
B bbb(2, 2);
A* aaa = &bbb;
aaa->returna();
aaa->returnb(); //to też powoduje błąd
Czy naprawdę nie da się odwołać do składowej klasy pochodnej za pomocą wskaźnika lub referencji typu klasy bazowej? Jeśli tak, a problem nie wynika z mojego niedopatrzenia to mega słabo :/ ( dziedziczenie traci trochę sensu w moich oczach )
* wiem oczywiście o metodach wirtualnych, ale to tylko inna postać metody o takiej samej nazwie w klasie pochodnej.