Przejdź do treści głównej
INF.04Pytanie #206 z 856jezyk-cpp-skladnia-i-pamiec

Co zostanie wyświetlone po wykonaniu przedstawionego kodu zapisanego w języku C++?

Opcje odpowiedzi:
A
Pochodna. Pochodna.
Prawidłowa
B
Bazowa. Pochodna.
C
Pochodna. Bazowa.
D
Bazowa. Bazowa.
Reklama

Wyjaśnienie i uzasadnienie dydaktyczne

Poprawna odpowiedź: A

Uzasadnienie i szersze wyjaśnienie:

Ten kod jest klasycznym przykładem działania polimorfizmu w C++ dzięki użyciu słowa kluczowego virtual.

  1. virtual void metoda() w KlasaBazowa deklaruje metodę jako wirtualną. Oznacza to, że decyzja o tym, która wersja metody (KlasaBazowa::metoda czy KlasaPochodna::metoda) zostanie wywołana, będzie podejmowana w czasie wykonania programu, na podstawie rzeczywistego typu obiektu, a nie typu wskaźnika.

  2. W funkcji main:

    • KlasaBazowa *bazowa = new KlasaPochodna(); – Wskaźnik bazowa jest typu KlasaBazowa*, ale wskazuje na obiekt, który faktycznie jest typu KlasaPochodna.
    • KlasaPochodna *pochodna = new KlasaPochodna(); – Wskaźnik pochodna jest typu KlasaPochodna* i wskazuje na obiekt typu KlasaPochodna.
  3. Wywołania metod:

    • bazowa->metoda(); – Ponieważ metoda() jest wirtualna, kompilator sprawdzi rzeczywisty typ obiektu, na który wskazuje bazowa. Jest to KlasaPochodna, więc zostanie wywołana przesłonięta wersja metody z klasy KlasaPochodna. Wyświetli się „Pochodna.”.
    • pochodna->metoda(); – Tutaj zarówno typ wskaźnika, jak i typ obiektu to KlasaPochodna, więc bez wątpliwości zostanie wywołana metoda z tej klasy. Wyświetli się „Pochodna.”.

Ostatecznie w konsoli zobaczymy: Pochodna. Pochodna.

Gdyby metoda metoda() w KlasaBazowa nie była wirtualna, wywołanie bazowa->metoda() uruchomiłoby wersję z KlasaBazowa (zgodnie z typem wskaźnika), a wynik byłby „Bazowa. Pochodna.”.

Chcesz poćwiczyć całą kwalifikację INF.04?

Egzamin próbny na czas, nauka działami, losowe pytanie albo przegląd całej bazy — wszystko w przeglądarce i bez zakładania konta.

Rozwiąż w Quizie

Pojęcia z tego pytania

Cały słownik INF04
Reklama

Podobne pytania z działu „Jezyk cpp skladnia i pamiec”

Ten sam obszar materiału z kwalifikacji INF.04. W całej bazie znajdziesz 25 pytań z tego działu.