|
DziedziczenieDziedziczenie to pewien bardzo fajny mechanizm i często bardzo przydatny w programowaniu (i nie tylko:))))Jeżeli piszemy program w którym będziemy potrzebowali np. obiektów: pies, kot, żółw i małpa - to należałoby się zastanowić nad tym, co takiego łączy je ze sobą. Tu już mi kolega podpowiada, że wszystkie są zwierzętami. To całkiem trafna uwaga. Skoro wszystkie są zwierzakami, to napewno mają wiele cech wspólnych (np. imie, wiek, właściciel). Żeby więc niepotrzebnie nie powtarzać definiowania tych pól w każdej z klas, zastosujemy dziedziczenie. Tworzymy klasę "Zwierzak", która będzie zawierać wszystkie wspólne cechy psa, kota, żółwia i małpy. Natomiast klasy "Pies", "Kot", "Żółw" i "Małpa" będą dziedziczyć z klasy "Zwierzak" (przejmą wszystkie jej własności i metody) oraz dodatkowo zdefiniują pewne specyficzne dla danych obiektów własności (pola) i metody. Np.: class Zwierzak //////////////////////////////////////////////////// public: // Klasa zwierzak zawiera pola: char* imie; // imie (łańcuch znakowy), int wiek; // wiek (liczba całkowita) oraz Human* wlasciciel; // wskaźnik do właściciela (np. obiektu klasy Human) // void jedz() { // dodatkowo zawiera metodę jedz() //... // dzięki której zwierzak odżywia się } // }; class Pies: public Zwierzak { //////////////////////////////////////////////////// public: // Obiekty klasy Pies, oprócz wszystkich pól i double czuloscNosa; // metod z klasy Zwierzak, będą posiadały dodatkowo: // pole 'czuloscNosa' (typu double), oraz void zamerdajOgonem() { // metodę zamerdajOgonem() //... // } }; class Kot: public Zwierzak { //////////////////////////////////////////////////// public: // Obiekty klasy Kot, będą dodatkowo posiadały double dlugoscWasow; // pole dlugoscWąsów // oraz void wejdzNaPlot() { // metodę wejdzNaPlot() umożliwiającą wszystkim //... // kotom (obiektom klasy Kot) wchodzenie na płoty } // } class Zolw: public Zwierzak { //////////////////////////////////////////////////// public: // Klasa Zolw definiuje metodę doSkorupy(), dzięki void doSkorupy() { // której obiekty klasy Zolw bedą mogły się chować //... // do skorupy } // } class Malpa: public Zwierzak { //////////////////////////////////////////////////// public: // Małpy będą posiadły własności z klasy Zwierzak void naDrzewo() { // i oprócz metod z klasy Zwierzak, będą potrafily //... // dodatkowo wejść na drzewo } // }Kilka dodatkowych infomacji o dziedziczeniu: W większości obiektowych języków programowania jest tak, że jak utworzymy sobie obiekt klasy "Zwierzak" (lub odnośnik do takich obiektów), to możemy przypisać mu nie tylko obiekty typu Zwierzak, ale również obiekty klas pochodnych. Oczywiście nie mona tego zrobić w drugą stronę. np.: Zwierzak *zw; // odnośnikowi typu Zwierzak zw = new Zwierzak(); // możemy przypisać odniesienie do zwierzaka zw = new Pies(); // ale również do psa zw = new Malpa(); // jak i małpy Pies *p; // jednak nie da się odnośnikowi typu pies p = new Zwierzak(); // przypisać odniesienia do zwierzaka |
Strony uczelniane: Str. Główna SerwisStudencki Poczta Sekret BSS-HOWTO Hasło Biblioteka Index stron |