W tym artykule poznasz różne modele dziedziczenia w programowaniu C ++: dziedziczenie wielopoziomowe, wielopoziomowe i hierarchiczne wraz z przykładami.
Dziedziczenie jest jedną z podstawowych cech języka programowania zorientowanego obiektowo. Umożliwia programistom wyprowadzenie nowej klasy z istniejącej klasy. Klasa pochodna dziedziczy cechy klasy bazowej (istniejącej klasy).
Istnieją różne modele dziedziczenia w programowaniu w C ++.
Dziedziczenie wielopoziomowe w języku C ++
W programowaniu w języku C ++ można nie tylko wyprowadzić klasę z klasy bazowej, ale także wyprowadzić klasę z klasy pochodnej. Ta forma dziedziczenia jest znana jako dziedziczenie wielopoziomowe.
klasa A (… ); klasa B: publiczna A (…); klasa C: publiczna B (………);
Tutaj klasa B wywodzi się z klasy bazowej A, a klasa C pochodzi z klasy pochodnej B.
Przykład 1: Dziedziczenie wielopoziomowe w C ++
#include using namespace std; class A ( public: void display() ( cout<<"Base class content."; ) ); class B : public A ( ); class C : public B ( ); int main() ( C obj; obj.display(); return 0; )
Wynik
Zawartość klasy bazowej.
W tym programie klasa C pochodzi z klasy B (która jest pochodną klasy bazowej A).
Obiekt obj klasy C jest zdefiniowany w main()
funkcji.
Gdy display()
funkcja jest wywoływana, display()
w klasie A jest wykonywana. To dlatego, że nie ma display()
funkcji w klasie C i klasie B.
Kompilator najpierw szuka display()
funkcji w klasie C. Ponieważ funkcja tam nie istnieje, szuka funkcji w klasie B (ponieważ C pochodzi od B).
Funkcja również nie istnieje w klasie B, więc kompilator szuka jej w klasie A (ponieważ B pochodzi od A).
Jeśli display()
funkcja istnieje w C, kompilator zastępuje display()
klasę A (z powodu przesłaniania funkcji składowej).
Dziedziczenie wielokrotne w C ++
W programowaniu C ++ klasa może pochodzić z więcej niż jednego elementu nadrzędnego. Na przykład: klasa Bat pochodzi z klas podstawowych Mammal i WingedAnimal. Ma to sens, ponieważ nietoperz jest zarówno ssakiem, jak i skrzydlatym zwierzęciem.
Przykład 2: Dziedziczenie wielokrotne w programowaniu w C ++
#include using namespace std; class Mammal ( public: Mammal() ( cout << "Mammals can give direct birth." << endl; ) ); class WingedAnimal ( public: WingedAnimal() ( cout << "Winged animal can flap." << endl; ) ); class Bat: public Mammal, public WingedAnimal ( ); int main() ( Bat b1; return 0; )
Wynik
Ssaki mogą rodzić bezpośrednio. Skrzydlate zwierzę może trzepotać.
Niejednoznaczność w dziedziczeniu wielokrotnym
Najbardziej oczywisty problem z dziedziczeniem wielokrotnym występuje podczas zastępowania funkcji.
Załóżmy, że dwie klasy bazowe mają tę samą funkcję, która nie jest zastępowana w klasie pochodnej.
Jeśli spróbujesz wywołać funkcję przy użyciu obiektu klasy pochodnej, kompilator wyświetli błąd. Dzieje się tak, ponieważ kompilator nie wie, którą funkcję wywołać. Na przykład,
class base1 ( public: void someFunction( ) (… .… … . ) ); class base2 ( void someFunction( ) (… .… … . ) ); class derived : public base1, public base2 ( ); int main() ( derived obj; obj.someFunction() // Error! )
Ten problem można rozwiązać za pomocą funkcji rozwiązywania zakresu, aby określić, która funkcja ma być klasą base1 lub base2
int main () (obj.base1 :: someFunction (); // Funkcja klasy base1 nazywa się obj.base2 :: someFunction (); // Wywoływana jest funkcja klasy base2.)
Dziedziczenie hierarchiczne w C ++
Jeśli więcej niż jedna klasa jest dziedziczona z klasy bazowej, jest to znane jako dziedziczenie hierarchiczne. W dziedziczeniu hierarchicznym wszystkie funkcje, które są wspólne dla klas potomnych, są zawarte w klasie bazowej.
Na przykład: Fizyka, Chemia, Biologia wywodzą się z przedmiotów ścisłych.
Składnia dziedziczenia hierarchicznego
class base_class (…) class first_derived_class: public base_class (…) class second_derived_class: public base_class (…) class third_derived_class: public base_class (…)