C ++ mitmekordne, mitmetasandiline ja hierarhiline pärand

Selles artiklis saate teada erinevatest C ++ programmeerimise pärandimudelitest: mitme-, mitmetasandiline ja hierarhiline pärimine koos näidetega.

Pärand on üks objektorienteeritud programmeerimiskeele põhijooni. See võimaldab tarkvaraarendajatel tuletada olemasolevast klassist uus klass. Tuletatud klass pärib baasklassi (olemasoleva klassi) tunnused.

C ++ programmeerimisel on erinevaid pärimise mudeleid.

C ++ mitmetasandiline pärand

C ++ programmeerimisel ei saa mitte ainult tuletada klassi baasklassist, vaid tuletada ka tuletatud klassist. Seda pärimisvormi nimetatakse mitmetasandiliseks pärimiseks.

klass A (…); B klass: avalik A (…); C klass: avalik B (………);

Siin on klass B tuletatud baasklassist A ja klass C tuletatud klassist B.

Näide 1: C ++ mitmetasandiline pärand

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

Väljund

 Põhiklassi sisu.

Selles programmis on klass C tuletatud klassist B (mis on tuletatud baasklassist A).

C-klassi objekti objekt on määratletud main()funktsioonis.

Kui display()funktsiooni nimetatakse, display()A-klassi lõpetamiseni. Sellepärast, et display()C- ja B-klassis funktsiooni pole .

Koostaja otsib kõigepealt display()funktsiooni klassis C. Kuna funktsiooni seal ei eksisteeri, otsib ta funktsiooni klassist B (kuna C tuleneb B-st).

Funktsiooni ei eksisteeri ka B-klassis, nii et kompilaator otsib seda klassist A (kuna B on tuletatud A-st).

Kui display()funktsioon C-s eksisteerib, alistab kompilaator display()klassi A ( liikmefunktsiooni alistamise tõttu).

C ++ mitmekordne pärand

C ++ programmeerimisel saab klassi tuletada mitmest vanemast. Näiteks: Nahkhiir on tuletatud baasklassidest Imetaja ja Tiibloom. See on mõttekas, sest nahkhiir on nii imetaja kui ka tiivuline loom.

Näide 2: mitmekordne pärand C ++ programmeerimisel

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

Väljund

Imetajad võivad sünnitada otseselt. Tiibadega loom saab klappida.

Mitmekordse pärimise mitmetähenduslikkus

Mitme pärimise kõige ilmsem probleem ilmneb funktsiooni ületamise ajal.

Oletame, et kahel põhiklassil on sama funktsioon, mida tuletatud klassis ei tühistata.

Kui proovite funktsiooni kutsuda tuletatud klassi objekti abil, näitab kompilaator viga. Sellepärast, et kompilaator ei tea, millist funktsiooni kutsuda. Näiteks,

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

Selle probleemi saab lahendada funktsiooni ulatuslahutusfunktsiooniga, et määrata, millise funktsiooni klassi base1 või base2 liigitada

 int main () (obj.base1 :: someFunction (); // klassi base1 funktsiooni nimetatakse obj.base2 :: someFunction (); // klassi2 base2 funktsiooni kutsutakse.)

C ++ hierarhiline pärand

Kui põhiklassist on päritud rohkem kui üks klass, nimetatakse seda hierarhiliseks pärandiks. Hierarhilises pärimises kaasatakse kõik klassides tavalised tunnused baasklassi.

Näiteks: füüsika, keemia, bioloogia on tuletatud loodusteaduste klassist.

Hierarhilise pärandi süntaks

 klassi baasklass (…) klass esimene_kasutatud_klass: avalik baasi_klass (…) klass teine_kultiveeritud_klass: avalik baasi_klass (…) klass kolmas_kasutatud_klass: avalik baasi_klass (…)

Huvitavad Artiklid...