Dziedziczenie 235
Ten program nie wypisuje nic na ekranie, gdyż jest jedynie zbiorem deklaracji klas
z pominięciem implementacji.
W liniach 6-27 deklarujemy klasę Ssak. W tym przykładzie klasa Ssak nie jest pochodną żadnej innej klasy. W świecie rzeczywistym ssaki są pochodną zwierząt. W programie w C++ jesteś w stanie przedstawić jedynie część posiadanych informacji o danym obiekcie. Rzeczywistość jest zbyt kompleksowa i nie można uwzględnić wszystkich jej aspektów. Każda hierarchia w C++ jest jedynie odzwierciedleniem fragmentu posiadanych informacji. Sztuka dobrego projektowania polega na przedstawieniu ważnych obszarów w taki sposób, aby całość maksymalnie przystawała do rzeczywistości.
Hierarchia musi mieć swój początek. W przykładowym programie zaczęliśmy jej tworzenie od klasy Ssak. Powoduje to, że niektóre zmienne wewnętrzne, które teoretycznie powinny znaleźć się w jakiejś „wyższej” klasie są reprezentowane tutaj. Np. każde zwierzę ma swój wiek i wagę dlatego jeśli klasa Ssak byłaby pochodną klasy Zwierze, to dziedziczyłaby z niej te atrybuty. Aktualnie znajdują się one wewnątrz klasy Ssak.
Dla uproszczenia programu, w klasie Ssak zadeklarowaliśmy jedynie sześć metod -cztery funkcje dostępu, Mow () i Spij ().
Klasa Pies dziedziczy z klasy Ssak (patrz linia 29). Każdy obiekt klasy Pies będzie posiadał trzy zmienne wewnętrzne: jegoWiek, jegoWaga i jegoRasa. Zauważ, że deklaracja klasy Pies nie zawiera deklaracji zmiennych jegoWiek i jegoWaga. Zmienne te są dziedziczone z klasy Ssak podobnie jak metody tej klasy, z wyjątkiem konstruktorów i destruktora.
Zapewne zauważyłeś, że w liniach 24 i 25 wykorzystaliśmy nowe słowo kluczowe protected. W poprzednich programach, zmienne wewnętrzne klasy były deklarowane po słowie kluczowym private. Jednak zmienne deklarowane jako private nie byłyby widoczne w klasie pochodnej. Oczywiście można również zadeklarować zmienne jegoWiek i jegoWaga jako public, ale jest to niewskazane, gdyż umożliwiłoby bezpośredni dostęp do nich innym klasom.
To co jest nam w tej chwili potrzebne, to udostępnienie tych zmiennych nie tylko klasie aktualnej ale i wszystkim klasom pochodnym. Gwarantuje to słowo kluczowe protected. Funkcje i zmienne zadeklarowane jako protected są dostępne we wszystkich klasach pochodnych (i są w nich prywatne).
Generalnie istnieją trzy typy dostępności elementu klasy: public, protected
i private. Jeśli funkcja ma dostęp do obiektu danej klasy to ma również bezpośredni dostęp do wszystkich jej zmiennych i funkcji zadeklarowanych jako public. Do zmiennych i funkcji zadeklarowanych jako private mają dostęp tylko funkcje wewnętrzne danej klasy. Zmienne i funkcje zadeklarowane jako protected są widoczne dla wszystkich funkcji danej klasy i jej klas pochodnych.
Ten program nie wypisuje nic na ekranie, gdyż jest jedynie zbiorem deklaracji klas z pominięciem implementacji.
ANALIZA:
W liniach 6-27 deklarujemy klasę Ssak. W tym przykładzie klasa Ssak nie jest pochodną żadnej innej klasy. W świecie rzeczywistym ssaki są pochodną zwierząt. W programie w C++ jesteś w stanie przedstawić jedynie część posiadanych informacji o danym obiekcie. Rzeczywistość jest zbyt kompleksowa i nie można uwzględnić wszystkich jej aspektów. Każda hierarchia w C++ jest jedynie odzwierciedleniem fragmentu posiadanych informacji. Sztuka dobrego projektowania polega na przedstawieniu ważnych obszarów w taki sposób, aby całość maksymalnie przystawała do rzeczywistości.
Hierarchia musi mieć swój początek. W przykładowym programie zaczęliśmy jej tworzenie od klasy Ssak. Powoduje to, że niektóre zmienne wewnętrzne, które teoretycznie powinny znaleźć się w jakiejś „wyższej” klasie są reprezentowane tutaj. Np. każde zwierzę ma swój wiek i wagę dlatego jeśli klasa Ssak byłaby pochodną klasy Zwierze, to dziedziczyłaby z niej te atrybuty. Aktualnie znajdują się one wewnątrz klasy Ssak.
Dla uproszczenia programu, w klasie Ssak zadeklarowaliśmy jedynie sześć metod -cztery funkcje dostępu, Mow () i Spi j ().
Klasa Pies dziedziczy z klasy Ssak (patrz linia 29). Każdy obiekt klasy Pies będzie posiadał trzy zmienne wewnętrzne: jegoWiek, jegoWaga i jegoRasa Zauważ, że deklaracja klasy Pies nie zawiera deklaracji zmiennych jegoWiek i jegoWaga. Zmienne te są dziedziczone z klasy Ssak podobnie jak metody tej klasy, z wyjątkiem konstruktorów i destruktora.
Zapewne zauważyłeś, że w liniach 24 i 25 wykorzystaliśmy nowe słowo kluczowe protected. W poprzednich programach, zmienne wewnętrzne klasy były deklarowane po słowie kluczowym private. Jednak zmienne deklarowane jako private nie byłyby widoczne w klasie pochodnej. Oczywiście można również zadeklarować zmienne jegoWiek i jegoWaga jako public, ale jest to niewskazane, gdyż umożliwiłoby bezpośredni dostęp do nich innym klasom.
To co jest nam w tej chwili potrzebne, to udostępnienie tych zmiennych nie tylko klasie aktualnej ale i wszystkim klasom pochodnym. Gwarantuje to słowo kluczowe protected. Funkcje i zmienne zadeklarowane jako protected są dostępne we wszystkich klasach pochodnych (i są w nich prywatne).
Generalnie istnieją trzy typy dostępności elementu klasy: public, protected i private. Jeśli funkcja ma dostęp do obiektu danej klasy to ma również bezpośredni dostęp do wszystkich jej zmiennych i funkcji zadeklarowanych jako public. Do zmiennych i funkcji zadeklarowanych jako private mają dostęp tylko funkcje wewnętrzne danej klasy. Zmienne i funkcje zadeklarowane jako protected są widoczne dla wszystkich funkcji danej klasy i jej klas pochodnych.