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
struct Animal {Definiujemy nowy typ obiektu lub umowę dotyczącą jego zachowania.virtual ~Animal() = default;Tworzymy lub aktualizujemy zmienną, pole albo przypisanie.virtual const char* sound() const { return "..."; }Zwracamy wyliczoną wartość do miejsca wywołania funkcji.
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();
4 (po wywołaniu w main)
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.
Jeśli rozumiesz przykład, oznacz lekcję jako ukończoną i przejdź dalej.