Aha.
Dziedziczenie jest tym co oddziela zwykłe programowanie przy użyciu abstrakcyjnych typów danych (ADT) od programowania obiektowego (OO).
[ Góra | Dół | Poprzednia sekcja | Następna sekcja | Szukaj w FAQ ]
Kiedy chcemy używać pojęć ogólnych i wywiedzionych od nich pojęć szczegółowych.
Istoty ludzkie używają abstrakcji dwojakiego rodzaju: jest-częścią i jest-rodzajem. Ford Taurus jest-rodzajem samochodu i jednocześnie Ford Taurus ma silnik, opony, etc. (silnik jest-częścią Forda Taurusa). Hierarchia jest-częścią stanowi element inżynierii oprogramowania od momentu wprowadzenia stylu ADT; dziedziczenie dodaje "ten drugi" ważny wymiar abstrakcji.
[ Góra | Dół | Poprzednia sekcja | Następna sekcja | Szukaj w FAQ ]
Używając słowa kluczowego : public:
Powyższy związek możemy opisać używając jednego z poniższych określeń:
(Uwaga: ten FAQ zajmuje się dziedziczeniem publicznym (public); prywatne i chronione rodzaje dziedziczenia mają inną specyfikę.)
[ Góra | Dół | Poprzednia sekcja | Następna sekcja | Szukaj w FAQ ]
Tak.
Obiekt klasy pochodnej jest tego samego rodzaju co obiekt klasy bazowej. W związku z tym konwersja (rzutowanie) ze wskaźnika do klasy pochodnej na wskaźnik do klasy bazowej jest całkowicie bezpieczna i zdarza się często. Przykładowo, jeśli wskazuję na samochód to i wskazuję na pojazd, zatem rzutowanie Car* na Vehicle* jest całkowicie bezpieczne i zupełnie normalne:
(Uwaga: ten FAQ zajmuje się dziedziczeniem publicznym (public); prywatne i chronione rodzaje dziedziczenia mają inną specyfikę.)
[ Góra | Dół | Poprzednia sekcja | Następna sekcja | Szukaj w FAQ ]
[ Góra | Dół | Poprzednia sekcja | Następna sekcja | Szukaj w FAQ ]
Żeby ochronić Cię przed przyszłymi zmianami w części implementacyjnej klasy bazowej.
Klasy pochodne nie mają dostępu do prywatnych (private) składników klasy bazowej. To w efektywny sposób "odseparowuje" klasę pochodną od wszelkich zmian dokonanych w obrębie prywatnych części klasy bazowej.
[ Góra | Dół | Poprzednia sekcja | Następna sekcja | Szukaj w FAQ ]
Klasa ma dwa różne interfejsy dla dwóch różnych grup klientów:
Jeżeli zakładasz, że również osoby spoza Twojego zespołu będą tworzyć klasy dziedziczące z Twojej klasy, wówczas powinieneś zadeklarować wszystkie pola swojej klasy jako private i używać chronionych (protected) funkcji dostępu zadeklarowanych jako inline, przy których pomocy klasy pochodne będą miały dostęp do prywatnych danych w klasie bazowej. W ten sposób prywatne pola mogą ulegać zmianie ale klasy pochodne nie ulegną zniszczeniu, chyba że zmienisz chronione funkcje dostępu.
[ Góra | Dół | Poprzednia sekcja | Następna sekcja | Szukaj w FAQ ]
E-mail the author
[ C++ FAQ Lite
| Spis treści
| Skorowidz
| O autorze
| ©
| Pobierz swoją własną kopię ]
Ostatnia aktualizacja Jun 17, 2002
Wersja polska: 0.1i Jul 12, 2004