ID: 2991 OOP - Zaawansowane Średnie

Ź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

  1. A

    Bazowa. Pochodna.

  2. B

    Pochodna. Pochodna.

  3. C

    Bazowa. Bazowa.

  4. 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.

Sprawdź się w praktyce

Rozwiąż pełny test próbny INF.04 albo wylosuj pojedyncze pytanie na szybką powtórkę.

Podobne pytania — OOP - Zaawansowane