C ++ több, többszintű és hierarchikus öröklődés

Ebben a cikkben megismerheti az öröklés különböző modelljeit a C ++ programozásban: Több, többszintű és hierarchikus öröklődés példákkal.

Az öröklés az objektum-orientált programozási nyelv egyik alapvető jellemzője. Ez lehetővé teszi a szoftverfejlesztők számára, hogy új osztályt nyerjenek a meglévő osztályból. A levezetett osztály örökli az alaposztály (meglévő osztály) jellemzőit.

A C ++ programozásban az öröklés különböző modelljei vannak.

C ++ többszintű öröklés

A C ++ programozásban nemcsak az osztályból származhat, hanem a származtatott osztályból is. Az öröklésnek ezt a formáját többszintű öröklésnek nevezik.

A osztály (… ); B. osztály: A nyilvános (…); C osztály: B nyilvános (………);

Itt a B osztály az A alaposztályból származik, a C osztály pedig a származtatott B osztályból származik.

1. példa: C ++ többszintű öröklődés

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

Kimenet

 Alaposztály tartalma.

Ebben a programban a C osztály a B osztályból származik (amely az A alaposztályból származik).

A C osztály objekt objektumát a main()függvény határozza meg .

A display()függvény meghívásakor display()az A osztályban végrehajtásra kerül. Azért, mert display()a C és a B osztályban nincs funkció.

A fordító először a display()C osztályban keresi a függvényt. Mivel a függvény ott nem létezik, a B osztályban lévő funkciót keresi (mivel C származik B-ből).

A függvény a B osztályban sem létezik, ezért a fordító az A osztályban keresi (mivel B származik A-ból).

Ha display()a C-ben létezik függvény, a fordító felülbírálja display()az A osztályt (a tagfüggvény felülírása miatt).

C ++ többszörös öröklés

A C ++ programozás során egy osztály több szülőtől származhat. Például: A denevér az emlősök és a szárnyasállatok alaposztályaiból származik. Ennek azért van értelme, mert a denevér emlős, valamint szárnyas állat.

2. példa: Többszörös öröklődés a C ++ programozásban

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

Kimenet

Az emlősök közvetlenül szülhetnek. Szárnyas állat csapkodhat.

Kétértelműség a többszörös öröklésben

A többszörös örökléssel kapcsolatos legkézenfekvőbb probléma a funkció felülírása során jelentkezik.

Tegyük fel, hogy két alaposztálynak ugyanaz a funkciója, amelyet a származtatott osztály nem ír felül.

Ha megpróbálja meghívni a függvényt a származtatott osztály objektumával, a fordító hibát mutat. Ez azért van, mert a fordító nem tudja, melyik függvényt hívja meg. Például,

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

Ez a probléma megoldható a hatókör-felbontási függvény segítségével annak megadásához, hogy melyik függvényt kell osztályozni az base1 vagy a base2 osztályba

 int main () (obj.base1 :: someFunction (); // Az base1 osztály függvényét obj.base2 :: someFunction (); // base2 osztály függvényét hívjuk meg.)

C ++ hierarchikus öröklés

Ha egynél több osztályt örökölnek az alaposztályból, akkor ezt hierarchikus öröklésnek nevezik. A hierarchikus öröklésben az összes osztály, amely a gyermekosztályokban gyakori, az alaposztályba tartozik.

Például: A fizika, a kémia, a biológia a természettudományi osztályból származik.

A hierarchikus öröklés szintaxisa

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

érdekes cikkek...