C++ bez cholesterolu: Programowanie hierarchiczne w C++: Dziedziczenie a hierarchizacja
4.4 Dziedziczenie a hierarchizacja
Bierzemy się zatem za omówienie tych właściwości, które faktycznie stanowią o
programowaniu obiektowym (niektórzy twierdzą, że właściwościami programowania
obiektowego są polimorfizm i enkapsulacja, ale to jest tylko mały ukłon w
stronę języków, które mają bardzo ograniczone pojęcie dziedziczenia lub też w
ogóle go nie posiadają). Dziedziczenie umożliwia wieloraką klasyfikację
obiektów. Jeden z najczęściej podawanych ideologicznych przykładów:
/ Osobowy
/ Samochód -<
Ruchome -< \ Ciężarowy
\ Pociąg
Jak widać z tego schematu, obiekt klasy Samochód jest również klasy Ruchome,
i takoż obiekt klasy Pociąg, a obiekty klas odpowiednio Osobowy i Ciężarowy są
obiektami klasy Samochód jak również klasy Ruchome. Ale również należy
pamiętać, że klasa Samochód jest POCHODNĄ (ang. derivative) Ruchome, przez co
Ruchome jest klasą PODSTAWOWĄ (ang. base) klasy Samochód. Jest też oczywiście
klasą podstawową klasy Pociąg.
W C++ wyglądałoby to tak:
class Ruchome { ... };
class Samochód: public Ruchome { ... };
class Pociąg: public Ruchome { ... };
class Osobowy: public Samochód { ... };
class Ciężarowy: public Samochód { ... };
Zgodnie z teorią obiektową, klasy podstawowe reprezetnują pojęcia bardziej
ogólne (nazywa się to "generalizacją" pojęć), natomiast klasy
pochodne są już bardziej szczegółowe ("specjalizacja" pojęć).
Dziedziczenie w C++ ma oczywiście dwie postacie, ale zajmiemy się tą pierwszą
najważniejszą. W każdym razie, jeśli klasa D dziedziczy po klasie B w ten
sposób:
class D: public B
{ ... };
to w efekcie wszystkie (tzn. prawie wszystkie) deklaracje z klasy B niejako
"przechodzą" do klasy D. To oznacza w praktyce, że operacje, które zostały
zadeklarowane w klasie B są dostępne dla obiektu klasy D. Nie wszystkie
oczywiście, jak pamiętamy z poprzedniego rozdziału o dziedziczeniu.
Niektórych pewnie zastanowiło, dlaczego w deklaracji dziedziczenia
jest słowo public. Jak się zresztą niektórzy domyślają, chodzi o to, że
deklaracje z klasy bazowej przechodzą do sekcji publicznej klasy pochodnej.
Podobnie jak domyślna sekcja w strukturze, taka sama obowiązuje domyślna
sekcja do umieszczania odziedziczonych składowych tak dla `struct' jak i dla
`class'.
Przypominam oczywiście, że unie nie mogą dziedziczyć, ani być dziedziczone.
Wyszukiwarka
Podobne podstrony:
inheritsproper inheritancebasics of inheritanceprivate inheritanceInheritanceInheritedInheritableThreadLocalstrange inheritanceinheritsjava lab05 inheritanceInherit the?rthinheritsinheritsInheritableThreadLocalinheritsinheritanceinheritance?B9F437więcej podobnych podstron