Zaklinacz Żółwii

Start
Download
PJWSTK
ASD     
PRG     
SKO     
WPR     
GaduGadu
Humor
Alt Info

Dziedziczenie

Dziedziczenie 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