Poznaj C++ w$ godziny0251

Poznaj C++ w$ godziny0251



Dziedziczenie 243

Zauważ, że w linii 74, domyślny konstruktor klasy Pies wywołuje domyślny konstruktor klasy Ssak. Takie rozwiązanie nie jest ściśle wymagane, jest to „dokumentacja” wywołania domyślnego konstruktora klasy bazowej. Bazowy konstruktor i tak zostanie wywołany.

W liniach 80-85 zawarta jest implementacja jednoparametrowego konstruktora klasy Pies. W części inicjalizującej Ginie 81-82) Pies inicjalizuje swoją klasę bazową, przekazując parametr i inicjalizuje zmienną mówiącą o rasie psa.

W liniach 87-93 znajduje się implementacja kolejnego, dwuargumentowego konstruktora. Podobnie jak poprzednie, najpierw inicjalizuje on klasę bazową poprzez wywołanie odpowiedniego konstruktora klasy Ssak. Dodatkowo inicjalizowana jest zmienna wewnętrzna jegoWaga. Zauważ, że nie ma możliwości inicjalizacji zmiennej klasy bazowej w części inicjalizacyjnej konstruktora. Ponieważ klasa Ssak nie posiada konstruktora pobierającego wartość dla zmiennej jegoWaga, dlatego inicja-lizację trzeba przeprowadzić w treści konstruktora.

Przeanalizuj implementację pozostałych konstruktorów i upewnij się, czy wszystko jest dla Ciebie zrozumiałe. Zwróć uwagę na to, co jest inicjalizowane w części inicjalizującej, a co w treści konstruktora.

Linie wydruku wyjściowego zostały ponumerowane. Ułatwi to analizę programu. Pierwsze dwie linie są efektem tworzenia obiektu Fido z wykorzystaniem konstruktora domyślnego.

Linie 3 i 4 ilustrują tworzenia Rover-a. Linie 5 i 6 należą do Buster-a. Zauważ, że wywołany konstruktor klasy Ssak pobiera jedną wartość, a wywołany konstruktor klasy Pies dwie wartości.

Po stworzeniu obiektów i wykonaniu na nich prostych operacji następuje usunięcie ich z pamięci. Zawsze jako pierwszy jest wywoływany destruktor klasy Pies, a następnie destruktor klasy Ssak.

Nadpisywanie funkcji

Obiekt klasy Pies ma dostęp do wszystkich funkcji wewnętrznych klasy Ssak tak jak do własnych. Podobnie, jak dodaliśmy metodę MachajOgonem(), możemy dodać inne funkcje. Istnieje również możliwość nadpisania funkcji klasy bazowej. Napisanie oznacza zmianę implementacji funkcji z klasy bazowej. Kiedy wywołujesz metodę z klasy pochodnej kompilator wywoła tę właściwą - stworzoną w tej klasie.

NOWY TERMIN


Kiedy klasa pochodna tworzy funkcję z tym samym typem wartości zwracanej, z tą samą nazwą i listą parametrów (sygnaturą) co jakaś funkcja w klasie bazowej i definiuje jej nową implementację to mówimy o nadpisaniu tej funkcji (metody).

Kiedy chcesz napisać funkcję, musisz zapewnić zgodność typu wartości zwracanej, nazwy i listy parametrów z funkcją klasy bazowej.

Zauważ, że w linii 74, domyślny konstruktor klasy Pies wywołuje domyślny konstruktor klasy Ssak. Takie rozwiązanie nie jest ściśle wymagane, jest to „dokumentacja” wywołania domyślnego konstruktora klasy bazowej. Bazowy konstruktor i tak zostanie wywołany.

W liniach 80-85 zawarta jest implementacja jednoparametrowego konstruktora klasy Pies. W części inicjalizującej (linie 81-82) Pies inicjalizuje swoją klasę bazową, przekazując parametr i inicjalizuje zmienną mówiącą o rasie psa.

W liniach 87-93 znajduje się implementacja kolejnego, dwuargumentowego konstruktora. Podobnie jak poprzednie, najpierw inicjalizuje on klasę bazową poprzez wywołanie odpowiedniego konstruktora klasy Ssak. Dodatkowo inicjalizowana jest zmienna wewnętrzna jegoWaga. Zauważ, że nie ma możliwości inicjalizacji zmiennej klasy bazowej w części inicjalizacyjnej konstruktora. Ponieważ klasa Ssak nie posiada konstruktora pobierającego wartość dla zmiennej jegoWaga. dlatego inicja-lizację trzeba przeprowadzić w treści konstruktora.

Przeanalizuj implementację pozostałych konstruktorów i upewnij się, czy wszystko jest dla Ciebie zrozumiałe. Zwróć uwagę na to, co jest inicjalizowane w części inicjalizującej, a co w treści konstruktora.

Linie wydruku wyjściowego zostały ponumerowane. Ułatwi to analizę programu. Pierwsze dwie linie są efektem tworzenia obiektu Fido z wykorzystaniem konstruktora domyślnego.

Linie 3 i 4 ilustrują tworzenia Rover-a. Linie 5 i 6 należą do Buster-a. Zauważ, że wywołany konstruktor klasy Ssak pobiera jedną wartość, a wywołany konstruktor klasy Pies dwie wartości.

Po stworzeniu obiektów i wykonaniu na nich prostych operacji następuje usunięcie ich z pamięci. Zawsze jako pierwszy jest wywoływany destruktor klasy Pies, a następnie destruktor klasy Ssak.

Nadpisywanie funkcji

Obiekt klasy Pies ma dostęp do wszystkich funkcji wewnętrznych klasy Ssak tak jak do własnych. Podobnie, jak dodaliśmy metodę MachajOgonem (), możemy dodać inne funkcje. Istnieje również możliwość nadpisania funkcji klasy bazowej. Napisanie oznacza zmianę implementacji funkcji z klasy bazowej. Kiedy wywołujesz metodę z klasy pochodnej kompilator wywoła tę właściwą - stworzoną w tej klasie.

NOWY TERMIN


Kiedy klasa pochodna tworzy funkcję z tym samym typem wartości zwracanej, z tą samą nazwą i listą parametrów (sygnaturą) co jakaś funkcja w klasie bazowej i definiuje jej nową implementację to mówimy o nadpisaniu tej funkcji (metody).

Kiedy chcesz napisać funkcję, musisz zapewnić zgodność typu wartości zwracanej, nazwy i listy parametrów z funkcją klasy bazowej.

Listing 16.5. ilustruje, co się stanie, gdy klasa Pies nadpisze metodę Mow() klasy

Ssak. Dla skrócenia programu pominęliśmy funkcje dostępu.


Wyszukiwarka

Podobne podstrony:
Poznaj C++ w$ godziny0232 Tablice 223Usuwanie tablicy ze sterty Rodzina jest wskaźnikiem do tablicy
Poznaj C++ w$ godziny0253 Dziedziczenie 245 Dziedziczenie 245 destruktor Psa. . destruktor Ssaka des
Poznaj C++ w$ godziny0123 Zaawansowane sterowanie programem 111 W linii 32 obliczana jest reszta z d
Poznaj C++ w$ godziny0238 Dziedziczenie i polimorfizmGodzina 16    Dziedziczenie 17 &
Poznaj C++ w$ godziny0241 Dziedziczenie 233 Dziedziczenie 233 Rysunek 16.1 Hierarchia zwierzątKróles
Poznaj C++ w$ godziny0243 Dziedziczenie 235 Ten program nie wypisuje nic na ekranie, gdyż jest jedyn
Poznaj C++ w$ godziny0245 Dziedziczenie 237 43:    void ProsOJedzenie() { cout « &quo
Poznaj C++ w$ godziny0247 Dziedziczenie 239 60: 61:    Pies::Pies () : 62:
Poznaj C++ w$ godziny0255 Dziedziczenie 247 Tak wygląda bezpośrednie wywołanie metody klasy Ssak. Li
Poznaj C++ w$ godziny0198 Zaawansowane funkcje 189Inicjalizacja obiektów Dotychczas, wartości wewnęt
Poznaj C++ w$ godziny0204 Przeciążanie operatorów W poprzednim rozdziale nauczyłeś się przeciążać me
cw2 3 Informacje ogólne: Zauważono, że endotoksyna bakteryjna (pirogen) pochodząca od bakterii G- wy
Należy zauważyć, że nawet prosty schemat konstrukcji PK przekazuje zasadę możliwego ruchu obrotowego
Poznaj C++ w$ godziny0081 Funkcje 67 Program wraca do funkcji main(), do linii 13. Okazuje się, że w
Poznaj C++ w$ godziny0088 74 Godzina 5 Last-in first-out oznacza, że ostatnia wartość położona na st

więcej podobnych podstron