Witam,
Już od jakiegoś czasu uczę się C++ i w tej chwili próbuję jak najlepiej zrozumieć pojęcia związane z dziedziczeniem i polimorfizmem. W ramach ćwiczeń postanowiłem stworzyć prosty program. W programie tym jest klasa bazowa i jej podklasy. W każdej klasie (i w bazowej, i w pochodnych) jest zmienna int o tej samej nazwie ("value"). W każdej klasie napisałem konstruktor, który nadaje zmiennej "value" różną wartość w zależności od klasy - w klasie bazowej konstruktor nadaje "value" wartość 0, a w innych klasach wartościami tymi są różne dodatnie liczby. Z ciekawości chciałem sprawdzić jak da się wyświetlać zmienne w tych klasach za pośrednictwem wskaźników. Zakładając, że klasa bazowa ( z której inne klasy dziedziczą) nazywa się "Bazowa" , a jedna z klas pochodnych nazywa się "Podklasa":
class Bazowa
{public:
int value;
Bazowa(int w=0)
{value=w;}};
class Podklasa:public Bazowa
{public:
int value;
Podklasa(int w=2)
{value=w;}};
Następnie utworzyłem reprezentanta Podklasy o nazwie "subclass" i wskaźnik Bazowa *wsk1 i próbowałem wyświetlić zmienną value (równą 2) z subclass.
Podklasa subclass;
Bazowa *wsk1;
wsk1=&subclass;
cout<<wsk1->value<<endl; /*wyswietla 0, czyli value nadawane przez konstruktor klasie bazowej, a nie value nadawane przez konstruktor klasie pochodnej Podklasa*/
Zauważyłem, że przy innym skonstruowaniu wskaźnika, da się tę wartość wyświetlić:
Podklasa subclass;
Podklasa *wsk1;
wsk1=&subclass;
cout<<wsk1->value<<endl; /*wyswietla 2, czyli value nadawane przez konstruktor klasie pochodnej, a nie value nadawane przez konstruktor klasie bazowej*/
Nie rozumiem dlaczego tak się dzieje i czy jest jakiś sposób, aby za pomocą wskaźnika Bazowa *wsk1 uzyskać dostęp do int value u reprezentanta Podklasy (klasa pochodna klasy Bazowa) o nazwie "subclass" ?
Pytanie chyba dla większości osób tutaj, może być banalnie proste, ale ja niestety nie mogę znaleźć klarownego wyjaśnienia (albo czytam i zupełnie nie rozumiem). Czy ma to jakiś związek z wiązaniem dynamicznym i statycznym ? Czy jest to gdzieś łopatologicznie wyjaśnione ? Generalnie chodzi mi o temat dostępu do klas pochodnych do bazowych i na odwrót oraz z klas pochodnych do innych klas pochodnych za pomocą wskaźników i nie tylko. Z góry dziękuję za pomoc.
Pozdrawiam