C ++ Flere, flere nivåer og hierarkiske arv

I denne artikkelen vil du lære om ulike modeller for arv i C ++ programmering: Flere, flernivå og hierarkiske arv med eksempler.

Arv er en av kjernefunksjonene i et objektorientert programmeringsspråk. Det tillater programvareutviklere å utlede en ny klasse fra eksisterende klasse. Den avledede klassen arver funksjonene til baseklassen (eksisterende klasse).

Det er forskjellige arvsmodeller i C ++ programmering.

C ++ Multilevel Arv

I C ++ programmering kan du ikke bare utlede en klasse fra baseklassen, men du kan også utlede en klasse fra den avledede klassen. Denne arven er kjent som flernivåarv.

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

Her er klasse B avledet fra basisklasse A og klasse C er avledet fra avledet klasse B.

Eksempel 1: C ++ arv på flere 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; )

Produksjon

 Grunnklasseinnhold.

I dette programmet er klasse C avledet fra klasse B (som er avledet fra basisklasse A).

Objektobjektet til klasse C er definert i main()funksjonen.

Når display()funksjonen kalles, blir display()klasse A utført. Det er fordi det ikke er noen display()funksjon i klasse C og klasse B.

Kompilatoren ser først etter display()funksjonen i klasse C. Siden funksjonen ikke finnes der, ser den etter funksjonen i klasse B (ettersom C er avledet fra B).

Funksjonen eksisterer heller ikke i klasse B, så kompilatoren ser etter den i klasse A (ettersom B er avledet fra A).

Hvis display()funksjon eksisterer i C, overstyrer kompilatoren display()klasse A (på grunn av overstyring av medlemsfunksjon).

C ++ Flere arv

I C ++ programmering kan en klasse stamme fra mer enn en foreldre. For eksempel: En klasse flaggermus er avledet fra basisklassene Pattedyr og WingedAnimal. Det er fornuftig fordi flaggermus er et pattedyr så vel som et bevinget 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; ) 

Produksjon

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

Tvetydighet i flere arv

Det mest åpenbare problemet med flere arv oppstår under overstyring av funksjoner.

Anta at to baseklasser har samme funksjon som ikke overstyres i avledet klasse.

Hvis du prøver å ringe til funksjonen ved hjelp av objektet til den avledede klassen, viser kompilatoren feil. Det er fordi kompilatoren ikke vet hvilken funksjon som skal ringes. 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 problemet kan løses ved hjelp av omfangsoppløsningsfunksjon for å spesifisere hvilken funksjon som skal klasses enten base1 eller base2

 int main () (obj.base1 :: someFunction (); // Funksjon av base1-klasse kalles obj.base2 :: someFunction (); // Funksjon av base2-klasse kalles.)

C ++ Hierarkisk arv

Hvis mer enn en klasse arves fra basisklassen, er den kjent som hierarkisk arv. I hierarkisk arv er alle funksjoner som er vanlige i barneklasser inkludert i basisklassen.

For eksempel: Fysikk, kjemi, biologi er avledet fra vitenskapsklasse.

Syntaks for 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 (…)

Interessante artikler...