Dziedziczenie (
ang. inheritance) to w
programowaniu obiektowym operacja polegająca na stworzeniu nowej
klasy na bazie klasy już istniejącej.
Na przykład, jeśli mamy klasę:
class Punkt
{
public:
float x,y;
Punkt(float _x, float _y);
virtual void wypisz();
virtual void przesuń(float przesuniecie_x, float przesuniecie_y);
};
Załóżmy, że w naszym programie wynikła potrzeba użycia dodatkowej klasy, która różni się od tej jedynie w kilku szczegółach. Dzięki dziedziczeniu nie musimy tworzyć takiej klasy od zera, a możemy zamiast tego wprowadzić jedynie konieczne modyfikacje do klasy już istniejącej.
Przykładowo chcemy, by nowa klasa miała dodatkowy składnik:
string nazwa;
a także odpowiednio zmieniona
metodę wypisz.
Dziedziczona klasa może zostać
zdefiniowana w następujący sposób:
class NazwanyPunkt: public Punkt
{
public:
string nazwa;
NazwanyPunkt(float _x=0,float _y=0,string _nazwa=NULL);
virtual void wypisz();
};
W ten sposób powstała nowa klasa o nazwie
NazwanyPunkt (klasa pochodna, podklasa, potomek) wywodząca się od klasy
Punkt (klasa podstawowa, nadklasa, rodzic).
Bardzo ważna w naszej klasie pochodnej jest pierwsza linijka:
class NazwanyPunkt: public Punkt
Wyrażenie znajdujące się po dwukropku nazywa się listą pochodzenia. Informuje ona od czego wywodzi się klasa pochodna.
W klasie pochodnej możemy zdefiniować:
- dodatkowe dane składowe (w naszym przykładzie: string nazwa;),
- dodatkowe funkcje składowe (w naszym przykładzie zmieniliśmy funkcję wypisz).
- składnik (np: funkcję) istniejący już w danej klasie podstawowej.