C ++ Višestruko, višerazinsko i hijerarhijsko nasljeđivanje

U ovom ćete članku naučiti o različitim modelima nasljeđivanja u programiranju na C ++: višestruko, višerazinsko i hijerarhijsko nasljeđivanje s primjerima.

Nasljeđivanje je jedna od osnovnih značajki objektno orijentiranog programskog jezika. Omogućuje programerima da izvedu novu klasu iz postojeće klase. Izvedena klasa nasljeđuje značajke osnovne klase (postojeće klase).

Postoje različiti modeli nasljeđivanja u programiranju na C ++.

C ++ višerazinsko nasljeđivanje

U programiranju na C ++, ne samo da možete izvesti klasu iz osnovne klase, već možete izvesti i klasu iz izvedene klase. Ovaj oblik nasljeđivanja poznat je pod nazivom nasljeđivanje na više nivoa.

razred A (…); razred B: javni A (…); razred C: javni B (………);

Ovdje je klasa B izvedena iz osnovne klase A, a klasa C izvedena je iz izvedene klase B.

Primjer 1: C ++ višerazinsko nasljeđivanje

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

Izlaz

 Sadržaj osnovne klase.

U ovom programu, klasa C izvedena je iz klase B (koja je izvedena iz osnovne klase A).

Objekt klase C definiran je u main()funkciji.

Kada se display()funkcija pozove, display()u klasi A se izvršava. To je zato što display()u klasi C i klasi B nema funkcije

Kompajler prvo traži display()funkciju u klasi C. Budući da funkcija tamo ne postoji, traži funkciju u klasi B (jer je C izvedeno iz B).

Funkcija također ne postoji u klasi B, pa je prevodilac traži u klasi A (jer je B izvedeno iz A).

Ako display()funkcija postoji u C, kompajler poništava display()klasu A (zbog nadjačavanja funkcije člana).

C ++ Višestruko nasljeđivanje

U programiranju na C ++, razred se može izvesti od više roditelja. Na primjer: Klasa Šišmiš izvedena je iz osnovnih klasa Sisavac i WingedAnimal. Ima smisla jer je šišmiš sisavac, ali i krilata životinja.

Primjer 2: Višestruko nasljeđivanje u programiranju na 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; ) 

Izlaz

Sisavci mogu izravno roditi. Krilata životinja može se zamahnuti.

Dvosmislenost u višestrukom nasljeđivanju

Najočitiji problem s višestrukim nasljeđivanjem javlja se tijekom nadjačavanja funkcije.

Pretpostavimo da dvije osnovne klase imaju istu funkciju koja nije nadjačana u izvedenoj klasi.

Ako pokušate pozvati funkciju pomoću objekta izvedene klase, kompajler prikazuje pogrešku. To je zato što kompajler ne zna koju funkciju pozvati. Na primjer,

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

Ovaj se problem može riješiti upotrebom funkcije razlučivanja opsega kako bi se specificiralo koju funkciju klasificirati ili base1 ili base2

 int main () (obj.base1 :: someFunction (); // Funkcija klase base1 naziva se obj.base2 :: someFunction (); // poziva se funkcija klase base2.)

C ++ Hijerarhijsko nasljeđivanje

Ako se više od jedne klase nasljeđuje iz osnovne klase, to je poznato kao hijerarhijsko nasljeđivanje. U hijerarhijskom nasljeđivanju, sve značajke koje su uobičajene u podređenim razredima uključene su u osnovnu klasu.

Na primjer: Fizika, Kemija i Biologija izvedeni su iz razreda prirodnih znanosti.

Sintaksa hijerarhijskog nasljeđivanja

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

Zanimljivi članci...