C ++ Багаторівневе, багаторівневе та ієрархічне успадкування

У цій статті ви дізнаєтесь про різні моделі успадкування у програмуванні на C ++: багаторівневе, багаторівневе та ієрархічне успадкування з прикладами.

Спадкування є однією з основних особливостей об’єктно-орієнтованої мови програмування. Це дозволяє розробникам програмного забезпечення вивести новий клас із існуючого класу. Похідний клас успадковує ознаки базового класу (існуючого класу).

У програмуванні на C ++ існують різні моделі успадкування.

C ++ багаторівневе успадкування

У програмуванні на C ++ не тільки ви можете отримати клас з базового класу, але ви також можете отримати клас з похідного класу. Ця форма успадкування відома як багаторівнева спадщина.

клас А (…); клас B: загальнодоступний A (…); клас C: загальнодоступний B (………);

Тут клас B походить від базового класу A, а клас C походить від похідного класу B.

Приклад 1: Багаторівневе успадкування С ++

 #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; )

Вихідні дані

 Зміст базового класу.

У цій програмі клас C походить від класу B (який походить від базового класу A).

Об'єкт obj класу C визначений у main()функції.

Коли display()функція викликана, display()у класі A виконується. Це тому, що display()в класі C та класі B немає функції

Спочатку компілятор шукає display()функцію в класі C. Оскільки функція там не існує, вона шукає функцію в класі B (оскільки C походить від B).

Функція також не існує в класі B, тому компілятор шукає її в класі A (оскільки B походить від A).

Якщо display()функція існує в C, компілятор замінює display()клас A (через перевизначення функції-члена).

C ++ Множинне успадкування

У програмуванні на C ++ клас може бути отриманий від кількох батьків. Наприклад: Клас Bat походить від базових класів Mammal та WingedAnimal. Це має сенс, оскільки кажан - це ссавець, а також крилата тварина.

Приклад 2: Множинне успадкування у програмуванні на 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; ) 

Вихідні дані

Ссавці можуть народжувати безпосередньо. Крилата тварина може махати.

Неоднозначність у множинному спадкуванні

Найбільш очевидна проблема багаторазового успадкування виникає під час заміни функції.

Припустимо, два базових класи мають однакову функцію, яка не замінена у похідному класі.

Якщо ви намагаєтесь викликати функцію за допомогою об'єкта похідного класу, компілятор показує помилку. Це тому, що компілятор не знає, яку функцію викликати. Наприклад,

 class base1 ( public: void someFunction( ) (… .… … . ) ); class base2 ( void someFunction( ) (… .… … . ) ); class derived : public base1, public base2 ( ); int main() ( derived obj; obj.someFunction() // Error! )  

Цю проблему можна вирішити за допомогою функції роздільної здатності, щоб вказати, яку функцію класифікувати або base1, або base2

 int main () (obj.base1 :: someFunction (); // Функція класу base1 називається obj.base2 :: someFunction (); // викликається функція класу base2.)

С ++ Ієрархічне успадкування

Якщо від базового класу успадковується більше одного класу, це називається ієрархічним успадкуванням. В ієрархічному успадкуванні всі функції, загальні для дочірніх класів, включаються в базовий клас.

Наприклад: Фізика, Хімія, Біологія походять з класу природничих наук.

Синтаксис ієрархічного успадкування

 клас base_class (…) class first_derived_class: public base_class (…) class second_derived_class: public base_class (…) class third_derived_class: public base_class (…)

Цікаві статті...