inheritance1


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:
inherits
proper inheritance
basics of inheritance
private inheritance
Inheritance
Inherited
InheritableThreadLocal
strange inheritance
inherits
java lab05 inheritance
Inherit the?rth
inherits
inherits
InheritableThreadLocal
inherits
inheritance
inheritance?B9F437

więcej podobnych podstron