C ++ Flere, flere niveauer og hierarkiske arv

I denne artikel lærer du om forskellige modeller af arv i C ++ programmering: Flere, flere niveauer og hierarkiske arv med eksempler.

Arv er et af kerneegenskaberne i et objektorienteret programmeringssprog. Det giver softwareudviklere mulighed for at udlede en ny klasse fra den eksisterende klasse. Den afledte klasse arver baseklassens funktioner (eksisterende klasse).

Der er forskellige arvsmodeller i C ++ programmering.

C ++ Arvelighed på flere niveauer

I C ++ programmering kan du ikke kun udlede en klasse fra basisklassen, men du kan også udlede en klasse fra den afledte klasse. Denne form for arv er kendt som multilevel arv.

klasse A (…) klasse B: offentlig A (…) klasse C: offentlig B (………);

Her er klasse B afledt af basisklasse A, og klasse C er afledt af den afledte klasse B.

Eksempel 1: C ++ arvelighed på flere niveauer

 #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

 Baseklasseindhold.

I dette program er klasse C afledt af klasse B (som er afledt af basisklasse A).

Objektobjektet i klasse C er defineret i main()funktionen.

Når display()funktionen kaldes, display()udføres klasse A. Det er fordi der ikke er nogen display()funktion i klasse C og klasse B.

Compileren ser først efter display()funktionen i klasse C. Da funktionen ikke findes der, ser den efter funktionen i klasse B (da C er afledt af B).

Funktionen findes heller ikke i klasse B, så kompilatoren ser efter den i klasse A (da B er afledt af A).

Hvis der display()findes funktion i C, tilsidesætter compileren display()klasse A (på grund af overstyring af medlemsfunktion).

C ++ flere arv

I C ++ programmering kan en klasse stamme fra mere end en forælder. For eksempel: En klasse Bat er afledt af baseklasser Pattedyr og WingedAnimal. Det giver mening, fordi flagermus er et pattedyr såvel som et vinget dyr.

Eksempel 2: Flere 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

Pattedyr kan føde direkte. Et vinget dyr kan klappe.

Tvetydighed i flere arv

Det mest åbenlyse problem med flere arv opstår under tilsidesættelse af funktioner.

Antag, at to basisklasser har samme funktion, som ikke tilsidesættes i afledt klasse.

Hvis du prøver at kalde funktionen ved hjælp af objektet fra den afledte klasse, viser compileren fejl. Det er fordi kompilatoren ikke ved, hvilken funktion der skal ringes til. For eksempel,

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

Dette problem kan løses ved hjælp af omfangsopløsningsfunktion til at specificere, hvilken funktion der skal klasses enten base1 eller base2

 int main () (obj.base1 :: someFunction (); // Funktion af base1 klasse kaldes obj.base2 :: someFunction (); // Funktion af base2 klasse kaldes.)

C ++ hierarkisk arv

Hvis mere end en klasse arves fra basisklassen, er den kendt som hierarkisk arv. I hierarkisk arv er alle funktioner, der er almindelige i underordnede klasser, inkluderet i basisklassen.

For eksempel: Fysik, kemi, biologi stammer fra naturfagsklassen.

Syntaks for hierarkisk arv

 klasse base_class (…) klasse first_derived_class: offentlig base_class (…) klasse second_derived_class: offentlig base_class (…) klasse third_derived_class: offentlig base_class (…)

Interessante artikler...