Dalej•LEKCJA 21 / 24

Dziedziczenie i virtual

Kurs C++ · Wyjaśnienie, przykłady, oczekiwany wynik i ćwiczenie.

Polimorfizm pozwala wywoływać metody według faktycznego typu obiektu.

Jak to działa?

Metoda virtual może zostać nadpisana w klasie pochodnej. override sygnalizuje taką intencję. Dla klas polimorficznych warto mieć wirtualny destruktor.

Przykład 1 — poznaj zapis

struct Animal {
    virtual ~Animal() = default;
    virtual const char* sound() const { return "..."; }
};

struct Dog : Animal {
    const char* sound() const override { return "Hau"; }
};

Metoda sound() w Dog przesłania implementację bazową.

Przeczytaj kod linijka po linijce

  1. struct Animal {Definiujemy nowy typ obiektu lub umowę dotyczącą jego zachowania.
  2. virtual ~Animal() = default;Tworzymy lub aktualizujemy zmienną, pole albo przypisanie.
  3. virtual const char* sound() const { return "..."; }Zwracamy wyliczoną wartość do miejsca wywołania funkcji.
Oczekiwany wynik / efektpo uruchomieniu przykładu
Hau (po wywołaniu metody przez obiekt Dog)

Przykład 2 — podobny problem, inne dane

Teraz przyjrzyj się drugiemu przykładowi. Zwróć uwagę na to, co zmieniło się w kodzie, a co w wyniku. Spróbuj przewidzieć rezultat przed przeczytaniem odpowiedzi.

struct Animal { virtual int legs() const { return 0; } virtual ~Animal() = default; };
struct Dog : Animal { int legs() const override { return 4; } };
// main: Dog dog; std::cout << dog.legs();
Wynik drugiego przykładupo uruchomieniu przykładu
4 (po wywołaniu w main)
Sprawdź, czy rozumiesz

Wróć do pierwszego przykładu, zmień jedną wartość i spróbuj samodzielnie przewidzieć wynik. Następnie uruchom kod i porównaj rezultat. W ten sposób nauczysz się nie tylko przepisywać instrukcje, ale rozumieć ich działanie.

Spróbuj samodzielnie

Utwórz klasę Cat z własnym dźwiękiem.

To już koniec tej lekcji.

Jeśli rozumiesz przykład, oznacz lekcję jako ukończoną i przejdź dalej.