C ++ viacnásobné, viacúrovňové a hierarchické dedičstvo

V tomto článku sa dozviete o rôznych modeloch dedenia v programovaní v C ++: Viacnásobné, viacúrovňové a hierarchické dedenie s príkladmi.

Dedenie je jednou zo základných vlastností objektovo orientovaného programovacieho jazyka. Umožňuje vývojárom softvéru odvodiť novú triedu od existujúcej. Odvodená trieda dedí vlastnosti základnej triedy (existujúca trieda).

V programovaní v C ++ existujú rôzne modely dedičnosti.

Viacúrovňová dedičnosť v C ++

V programovaní v C ++ môžete nielen odvodiť triedu od základnej triedy, ale môžete tiež odvodiť triedu od odvodenej triedy. Táto forma dedičstva je známa ako viacúrovňové dedičstvo.

trieda A (…); trieda B: verejné A (…); trieda C: verejné B (… … …);

Tu je trieda B odvodená od základnej triedy A a trieda C je odvodená od odvodenej triedy B.

Príklad 1: Viacúrovňová dedičnosť 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; )

Výkon

 Obsah základnej triedy.

V tomto programe je trieda C odvodená od triedy B (ktorá je odvodená od základnej triedy A).

Objekt obj triedy C je definovaný vo main()funkcii.

Keď sa display()funkcia volá, display()vykoná sa v triede A. Je to preto, lebo display()v triede C a triede B nie je žiadna funkcia.

Kompilátor najskôr hľadá display()funkciu v triede C. Pretože tam funkcia neexistuje, hľadá funkciu v triede B (keďže C je odvodené od B).

Funkcia tiež neexistuje v triede B, takže kompilátor ju vyhľadáva v triede A (keďže B je odvodené od A).

Ak display()funkcia existuje v C, kompilátor prepíše display()triedu A (kvôli prepísaniu členskej funkcie).

C ++ viacnásobné dedenie

V programovaní v C ++ môže byť trieda odvodená od viac ako jedného rodiča. Napríklad: Trieda Bat je odvodená od základných tried Mammal a WingedAnimal. Dáva to zmysel, pretože netopier je cicavec aj okrídlené zviera.

Príklad 2: Viacnásobná dedičnosť v programovaní v 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; ) 

Výkon

Cicavce môžu rodiť priamo. Okrídlené zviera môže mávať.

Nejednoznačnosť vo viacerých dedičstvách

Najviditeľnejší problém s viacnásobným dedičstvom nastáva počas prepísania funkcie.

Predpokladajme, že dve základné triedy majú rovnakú funkciu, ktorá sa v odvodenej triede neprepíše.

Ak sa pokúsite zavolať funkciu pomocou objektu odvodenej triedy, kompilátor zobrazí chybu. Je to preto, že kompilátor nevie, ktorú funkciu má volať. Napríklad,

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

Tento problém je možné vyriešiť použitím funkcie rozlíšenia rozsahu na určenie, ktorá funkcia sa má zaradiť do triedy base1 alebo base2

 int main () (obj.base1 :: someFunction (); // Funkcia triedy base1 sa nazýva obj.base2 :: someFunction (); // Funkcia triedy base2 sa volá.)

Hierarchická dedičnosť v C ++

Ak sa zo základnej triedy dedí viac ako jedna trieda, je to známe ako hierarchické dedičstvo. V hierarchickom dedičstve sú všetky funkcie, ktoré sú spoločné v podradených triedach, zahrnuté v základnej triede.

Napríklad: Fyzika, chémia, biológia sú odvodené z prírodovednej triedy.

Syntax hierarchickej dedičnosti

 trieda base_class (…) trieda first_derived_class: verejná base_class (…) trieda second_derived_class: verejná base_class (…) trieda third_derived_class: verejná base_class (…)

Zaujímavé články...