Dziedziczenie wielopoziomowe, hierarchiczne i wielopoziomowe w C ++

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 (…)

Interesujące artykuły...