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