Dziedziczenie a dostęp do zmiennych w klasach bazowych i pochodnych.
Ostatnio zmodyfikowano 2018-07-04 13:12
Puny_mortal Temat założony przez niniejszego użytkownika |
Dziedziczenie a dostęp do zmiennych w klasach bazowych i pochodnych. » 2018-07-04 09:48:24 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;
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;
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 |
|
pekfos |
» 2018-07-04 13:12:41 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" ? |
Musisz rzutować wskaźnik w dół, do wskaźnika na klasę pochodną. Ze wskaźnika na klasę pochodną możesz odwołać się do obu zmiennych, ze wskaźnika na bazową tylko do jednej. |
|
« 1 » |