Źródło: Arkusze CKE
Jakie rezultaty pojawią się po uruchomieniu poniższego kodu napisanego w języku C++?
class KlasaBazowa {
public:
virtual void metoda() {
cout << "Bazowa. ";
}
};
class KlasaPochodna : public KlasaBazowa {
public:
void metoda() {
cout << "Pochodna. ";
}
};
int main() {
KlasaBazowa *bazowa = new KlasaPochodna();
KlasaPochodna *pochodna = new KlasaPochodna();
bazowa->metoda();
pochodna->metoda();
return 0;
}
Warianty odpowiedzi
-
A
Bazowa. Pochodna.
-
B
Pochodna. Pochodna.
-
C
Bazowa. Bazowa.
-
D
Pochodna. Bazowa.
Wyjaśnienie
Kluczowym elementem tego kodu jest użycie słowa virtual przy metodzie w klasie bazowej.
Pierwszy wskaźnik wskazuje na obiekt klasy pochodnej. Dzięki wirtualności metody program w czasie działania rozpoznaje prawdziwy typ obiektu i wywołuje wersję z klasy pochodnej.
Drugi wskaźnik od początku jest typu KlasaPochodna, więc również uruchamia tę samą wersję. W rezultacie na ekran trafia dwukrotnie napis Pochodna.