C ++ vícenásobná, víceúrovňová a hierarchická dědičnost

V tomto článku se dozvíte o různých modelech dědičnosti v programování v C ++: Vícenásobné, víceúrovňové a hierarchické dědičnosti s příklady.

Dědičnost je jednou ze základních vlastností objektově orientovaného programovacího jazyka. Umožňuje vývojářům softwaru odvodit novou třídu od stávající třídy. Odvozená třída dědí funkce základní třídy (existující třída).

V programování v C ++ existují různé modely dědičnosti.

Víceúrovňová dědičnost v C ++

V programování v C ++ můžete nejen odvodit třídu ze základní třídy, ale můžete také odvodit třídu z odvozené třídy. Tato forma dědictví je známá jako víceúrovňové dědictví.

třída A (…); třída B: veřejná A (…); třída C: veřejná B (………);

Zde je třída B odvozena od základní třídy A a třída C je odvozena od odvozené třídy B.

Příklad 1: Víceúrovňová dědičnost 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ýstup

 Obsah základní třídy.

V tomto programu je třída C odvozena od třídy B (která je odvozena od základní třídy A).

Objekt obj třídy C je definován ve main()funkci.

Při display()volání funkce se display()ve třídě A provede. Je to proto, že display()ve třídě C a třídě B není žádná funkce.

Kompilátor nejprve hledá display()funkci ve třídě C. Protože tam funkce neexistuje, hledá funkci ve třídě B (protože C je odvozeno od B).

Funkce také neexistuje ve třídě B, takže ji kompilátor hledá ve třídě A (protože B je odvozeno od A).

Pokud display()funkce existuje v C, přepíše kompilátor display()třídy A (z důvodu přepsání členské funkce).

C ++ vícenásobná dědičnost

V programování v C ++ může být třída odvozena od více než jednoho rodiče. Například: Třída Bat je odvozena od základních tříd Mammal a WingedAnimal. Dává to smysl, protože netopýr je savec i okřídlené zvíře.

Příklad 2: Vícenásobná dědičnost v programování 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ýstup

Savci mohou rodit přímo. Okřídlené zvíře může mávat.

Nejednoznačnost ve více dědičnosti

Nejviditelnější problém s vícenásobnou dědičností nastává během přepsání funkce.

Předpokládejme, že dvě základní třídy mají stejnou funkci, která není v odvozené třídě přepsána.

Pokud se pokusíte zavolat funkci pomocí objektu odvozené třídy, kompilátor zobrazí chybu. Je to proto, že kompilátor neví, kterou funkci má volat. Napří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 lze vyřešit pomocí funkce rozlišení oboru k určení, kterou funkci zařadit do třídy base1 nebo base2

 int main () (obj.base1 :: someFunction (); // Funkce třídy base1 se nazývá obj.base2 :: someFunction (); // Funkce třídy base2 se nazývá.)

C ++ hierarchická dědičnost

Pokud se ze základní třídy dědí více než jedna třída, je to známé jako hierarchická dědičnost. V hierarchické dědičnosti jsou všechny funkce, které jsou společné v podřízených třídách, zahrnuty do základní třídy.

Například: Fyzika, Chemie, Biologie jsou odvozeny ze třídy Věda.

Syntaxe hierarchické dědičnosti

 třída base_class (…) třída first_derived_class: veřejná base_class (…) třída second_derived_class: veřejná base_class (…) třída third_derived_class: veřejná base_class (…)

Zajímavé články...