Uwagi c.d: (4.11.2009 w. 5)
Domniemanie: Jeśli w definicji klasy pochodnej w liście pochodzenia przed nazwą klasy podstawowej nie ma słowa public, protected, private to przez domniemanie przyjęte
zostanie private np.: class rekin : ryba {...};
Jeśli przy def. kiasy pochodnej na liście pochodzenia będzie słowo public np.: class rekin : public ryba {...}; to składniki public i protected z klasy podstawowej są dostępne jako składniki typu odp. public i protected w
klasie pochodnej
Jeśli przy def. klasy pochodnej na liście pochodzenia będzie słowo protected np.: class rekin : protected ryba {...}; to składniki public i protected z klasy podstawowej są składnikami typu protected w klasie pochodnej Jeśli przy def. klasy pochodnej na liście pochodzenia będzie słowo private np.: class rekin : prlvate ryba {...}; to składniki public i protected z klasy podstawowej są / składnikami typu prlvate w klasie pochodnej
Uwagi c.d: się nie dziedzicz/? Konstruktorów. Powód jest prosty. Klasa pochodna zawiera elementy klasy podstawowej plus dodatkowe składowe z klasy pochodnej. Konstruktor z klasy podstawowej nie inicjuje składowych danych z obiektu pochodnego.
Destruktorów. Destruktor jest ściśle powiązany z konstruktorem. Dlatego ten z klasy podstawowej nie może być użyty w klasie pochodnej.
Uwagi c.d:
Rozróżniamy dziedziczenie:
1. pojedyncze
2. wielokrotne
W przypadku dziedziczenia pojedynczego klasa pochodna posiada dokładnie jedną klasę bazową (hierarchia klas dla tego dziedziczenia mają strukturę drzewiastą). Dotyczył tego powyższy przykład. W przypadku dziedziczenia wielokrotnego klasa pochodna ma więcej niż jedną klasę bazową (hierarchia klas dla tego dziedziczenia mają strukturę grafu). Np. kl. Amfibia Jest pochodną od klas: Pojazd I Statek.
Dziedziczenie .'podsumowanie
• Dziedziczeniem nazywamy proces tworzenia nowych klas na podstawie klas już istniejących;
class nowy_punkt : public punkt {....}; class rekin : public ryba {....};
Klasa wykorzystywana jako podstawa w procesie
dziedziczenia jest klasą bazową,
Klasy dziedziczące po klasie bazowej są to klasy
pochodne;
Klasa pochodna dziedziczy wszystkie możliwości funkcjonalne klasy bazowej, poszerzone o nowe poła i funkcje;
Niemożliwe jest usunięcie jakichkolwiek elementów klasy bazowej. Można je tylko przesłonić.
| Przesłanianiem nazywamy predefiniowanie funkcji klasy bazowej w klasach pochodnych;
• Przesłanianie stosuje się w celu całkowitej zmiany działania funkcji klasy bazowej lub, znacznie częściej, jej uzupełnienia i rozszerzenia o dodatkowe operacje;
• Przesłaniając funkcje klasy bazowej musisz zapewnić Identyczność nagłówków funkcji;
• Istotne jest również aby funkcje z klasy bazowej były dostępna dla klas pochodnych. Zapewnia to operator zakresu: public, protected w definicji klasy.
class nowy_punkt : public punkt {....}; class nowy_punkt : protected punkt {....},*
Klasy abstrakcyjne
Klasa abstrakcyjna to klasa, która nie reprezentuje
Żadnego konkretnego obiektu
Np klasa ssak nie ma obiektów i istnieje tylko po to
by mieć klasy pochodne (człowiek psy, koty, konie,
świnia, baran)
Ssak jest zatem pojęciem abstrakcyjnym - klasą
Abstrakcyjną
Uwagi dotyczące destruktorów klas z funkcjami
wirtualnymi:
• Jeśli klasa deklaruje jedną z funkcji jako vlrtual, to wówczas jej destruktor również deklarujemy jako virtual
• Przypomnienie: destruktor to • nazwaJdasy() (funkcja bez argumentów i
nic nie zwracająca)
• Jeśli w klasie instrument była funkcja wirtualna vołd virtual wydaj_dzwiek(); to znaczy, że na obiekty klas pochodnych chcemy mówić czasem jak na obiekty klasy podstawowej (za pomocą wskaźników lub referenci do klasy instrument - tj. kl. bazowej). Np. zagraj na Instrumencie chcąc usłyszeć dźwięk fortepianu A jeśli chcemy zniszczyć ten instrument, to musimy uruchomić odpowiedni destruktor (do zniszczenia fortepianu). Któryż destruktorów wybrać do niszczenia obiektu klasy pochodnej (bazowej)? Pokazuje to mechanizm funkcji wirtualnej (tj. kompilator orientuje się po tym, na obiekt której klasy wskazuje wskaźnik lub przezwisko).
• Dlaczego przez domniemanie destruktor nie Jest wirtualny - ze względu na dłuższy czas wykonania 1 większą wielkość obiektu
Przykład;