C ++ več, večstopenjsko in hierarhično dedovanje

V tem članku boste spoznali različne modele dedovanja v programiranju na C ++: večplastno, večnivojsko in hierarhično dedovanje s primeri.

Dedovanje je ena glavnih značilnosti objektno usmerjenega programskega jezika. Razvijalcem programske opreme omogoča, da iz obstoječega razreda izpeljejo nov razred. Izpeljani razred podeduje lastnosti osnovnega razreda (obstoječi razred).

V programiranju na C ++ obstajajo različni modeli dedovanja.

Dedovanje na več ravneh C ++

Pri programiranju na C ++ lahko iz osnovnega razreda izpeljete ne samo razred, temveč tudi razred iz izpeljanega razreda. Ta oblika dedovanja je znana kot dedovanje na več ravneh.

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

Tu razred B izhaja iz osnovnega razreda A, razred C pa iz izvedenega razreda B.

Primer 1: Dedovanje na več ravneh C ++

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

Izhod

 Vsebina osnovnega razreda.

V tem programu razred C izhaja iz razreda B (ki izhaja iz osnovnega razreda A).

Objekt razreda C je definiran v main()funkciji.

Ko je display()funkcija poklicana, se display()v razredu A izvede. To je zato, ker display()v razredu C in razredu B ni funkcije

Prevajalnik najprej poišče display()funkcijo v razredu C. Ker funkcija tam ne obstaja, poišče funkcijo v razredu B (saj C izhaja iz B).

Funkcija tudi ne obstaja v razredu B, zato jo prevajalnik išče v razredu A (saj B izhaja iz A).

Če display()funkcija obstaja v C, prevajalnik preglasi display()razred A (zaradi preglasitve funkcije člana).

C ++ večkratno dedovanje

Pri programiranju na C ++ lahko razred izpelje več staršev. Na primer: Razred Bat izhaja iz osnovnih razredov Mammal in WingedAnimal. Smiselno je, ker je netopir sesalec in tudi krilata žival.

Primer 2: Večkratno dedovanje pri 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; ) 

Izhod

Sesalci lahko rodijo neposredno. Krilata žival se lahko zavihti.

Dvoumnost pri večkratnem dedovanju

Najbolj očitna težava z večkratnim dedovanjem se pojavi med razveljavitvijo funkcije.

Recimo, da imata dva osnovna razreda isto funkcijo, ki je v izpeljanem razredu ni mogoče preglasiti.

Če poskušate funkcijo poklicati z objektom izpeljanega razreda, prevajalnik pokaže napako. To je zato, ker prevajalnik ne ve, katero funkcijo naj pokliče. Na primer

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

To težavo je mogoče rešiti s pomočjo funkcije ločljivosti obsega, da določite, katero funkcijo razvrstite v bazo1 ali bazo2

 int main () (obj.base1 :: someFunction (); // Funkcija razreda base1 se imenuje obj.base2 :: someFunction (); // imenuje se funkcija razreda base2.)

C ++ hierarhična dediščina

Če je iz osnovnega razreda podedovanih več razredov, je to znano kot hierarhično dedovanje. Pri hierarhičnem dedovanju so v osnovni razred vključene vse značilnosti, ki so pogoste v podrejenih razredih.

Na primer: fizika, kemija in biologija izhajajo iz predavanja naravoslovja.

Sintaksa hierarhične dediščine

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

Zanimive Članki...