Witam wszystkich,
Trochę zgłupiałam troszeczkę. Zagadnienie dość banalne, a jednak byłam przekonana, że działa to inaczej... Stąd fajnie by było, gdyby ktoś mi podpowiedział jak to działa (chociaż to już raczej wiem, bardziej DLACZEGO to tak działa). Załóżmy prosty przypadek kodu:
class Zwierze{
public:
int paszcza;
virtual void dajGlos(){cout<<"klapanie paszcza"<<endl;}
};
class Pies : public Zwierze{
public:
int nogi;
void dajGlos(){cout<<"hau hau"<<endl;}
};
int main(){
Zwierze* z1 = new Pies();
z1->dajGlos();
z1->nogi = 4;
}
Oczywiście* dajGlos()* działa jak trzeba, ale dostać się do * nóg" * już nie mogę... Czy nie taka właśnie jest idea dziedziczenia, aby "rozszerzać" klasy bazowe? Oczywiście, mogę napisać bez problemu:
Pies p1 = new Pies();
p1->dajGlos();
p1->nogi = 4;
Ale w ten sposób nie mogę skorzystać z dobrodziejstw polimorfizmu... Czy naprawdę jedno wyklucza drugie?
Może mi ktoś powiedzieć, gdzie w moim rozumowaniu jest błąd?
Pozdrawiam!
Malvinka