C ++ Multipel, flernivå och hierarkisk arv

I den här artikeln lär du dig om olika arvsmodeller i C ++ programmering: Multipel, flernivå och hierarkisk arv med exempel.

Arv är en av kärnfunktionerna i ett objektorienterat programmeringsspråk. Det gör att programutvecklare kan härleda en ny klass från den befintliga klassen. Den härledda klassen ärver funktionerna i basklassen (befintlig klass).

Det finns olika arvsmodeller i C ++ programmering.

C ++ Arv på flera nivåer

I C ++ programmering kan du inte bara härleda en klass från basklassen utan du kan också härleda en klass från den härledda klassen. Denna form av arv kallas för arv med flera nivåer.

klass A (…); klass B: allmän A (…); klass C: allmänhet B (… ……);

Här härrör klass B från basklassen A och klass C härrör från den härledda klassen B.

Exempel 1: C ++ Arv på flera nivåer

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

Produktion

 Basklassinnehåll.

I detta program härrör klass C från klass B (som härrör från basklass A).

Objektobjektet för klass C definieras i main()funktionen.

När display()funktionen anropas display()utförs i klass A. Det beror på att det inte finns någon display()funktion i klass C och klass B.

Kompilatorn letar först efter display()funktionen i klass C. Eftersom funktionen inte finns där letar den efter funktionen i klass B (eftersom C härrör från B).

Funktionen finns inte heller i klass B, så kompilatorn letar efter den i klass A (eftersom B härleds från A).

Om display()funktion finns i C åsidosätter kompilatorn display()klass A (på grund av medlemsfunktionens åsidosättning).

C ++ multipel arv

I C ++ programmering kan en klass härledas från mer än en förälder. Till exempel: En klass Bat är härledd från basklasserna Mammal och WingedAnimal. Det är vettigt eftersom fladdermus är ett däggdjur såväl som ett bevingat djur.

Exempel 2: Multipel arv i C ++ programmering

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

Produktion

Däggdjur kan föda direkt. Bevingat djur kan klappa.

Tvetydighet i flera arv

Det mest uppenbara problemet med flera arv uppstår under funktionsöverstyrning.

Antag att två basklasser har samma funktion som inte åsidosätts i härledd klass.

Om du försöker anropa funktionen med objektet från den härledda klassen, visar kompilatorn fel. Det beror på att kompilatorn inte vet vilken funktion som ska ringas. Till exempel,

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

Detta problem kan lösas med hjälp av omfångsupplösningsfunktionen för att ange vilken funktion som ska klassas antingen bas1 eller bas2

 int main () (obj.base1 :: someFunction (); // Funktion för bas1-klass kallas obj.base2 :: someFunction (); // Funktion för base2-klass kallas.)

C ++ Hierarkisk arv

Om mer än en klass ärvs från basklassen är den känd som hierarkisk arv. I hierarkiskt arv ingår alla funktioner som är vanliga i barnklasser i basklassen.

Till exempel: Fysik, kemi, biologi härrör från naturvetenskapsklass.

Syntax för hierarkisk arv

 class base_class (…) class first_derived_class: public base_class (…) class second_derived_class: public base_class (…) class third_derived_class: public base_class (…)

Intressanta artiklar...