Dziedziczenie

Mechanizm dziedziczenia

Jeśli mamy gotową klasę Samochod, a potrzebna jest nam klasa Taksowka, mamy do wyboru kilka dróg:

    • przerobić klasę Samochod, na klasę Taksowka
    • mamy nową klasę, ale tracimy starą
    • dodać klasę Taksowka na wzór klasy Samochod
    • musimy pamiętać, by każdą poprawkę w klasie Samochod nanosić również w klasie Taksowka
    • zbudować klasę Taksowka wykorzystując klasę Samochod i mechanizm dziedziczenia
    • zachowujemy starą klasę, a w nowej klasie piszemy tylko to co chcemy dodać lub zmienić.

Jak zrobić klasę Taksowka w oparciu o klasę Samochod?

    • przerobić klasę Samochod, na klasę Taksowka
    • mamy nową, tracimy starą
    • dodać klasę Taksowka na wzór klasy Samochod
    • konieczność powielania przeróbek
    • zbudować klasę Taksowka wykorzystując klasę Samochod i mechanizm dziedziczenia
    • zachowujemy starą, a w nowej tylko to co chcemy dodać lub zmienić
Dziedziczenie to mechanizm pozwalający definiować nowe klasy przy wykorzystaniu klas już zdefiniowanych poprzez podanie różnic i uzupełnień.

Dziedziczenie jest trzecią cechą charakterystyczną programowania obiektowego.

Klasa pochodna

Składniki klasy pochodnej

Klasa pochodna z definicji (z kilkoma wyjątkami, zależnymi od języka programowania) zawiera wszystkie składniki klasy macierzystej, tak zwane składniki odziedziczone. Ponadto klasa ta może zawierać:

Klasa Samochod

Klasa Samochod i klasa pochodna Taksowka

Klasa Samochod i klasa pochodna Taksowka

Klasa Samochod i klasa pochodna Taksowka

Klasa Samochod i klasa pochodna Taksowka

Czego się nie dziedziczy?

Teoretycznie dziedziczyć można wszystko. W praktyce najczęściej nie zezwala się na dziedziczenie konstruktorów, destruktorów i operatora przypisania.

Dziedziczenie, a kompozycja

Dziedziczenie kilkupokoleniowe

Klasa pochodna od jakiejś klasy sama może być klasą macierzystą dla innej klasy.

class Pojazd {
....
};

class Samochod : public Pojazd{
....
};

class Taksowka : public Samochod{
....
};

class Radio_taxi : public Taksowka{
....
};

Hierarchia klas

Ustawienie klas w hierarchię dziedziczenia, to nie tylko oszczędność czasu przy definiowaniu klas znajdujących się na dole hierarchii. Ważniejsze jest to, że obiekty, które znajdują się na dole hierarchii, mogą być czasem traktowane tak, jakby były obiektami z góry hierarchii.

Pożytki z dziedziczenia