Virtuālā funkcija ir dalībnieka funkcija, kas definēta bāzes klasē / vecāku klasē un atkārtoti definēta atvasinātajā klasē. Virtuālā funkcija ļauj izsaukt funkcijas atvasināto klases versiju, izmantojot atsauci vai rādītāju uz bāzes klasi.
Apskatīsim dažus piemērus, lai izprastu virtuālās funkcijas jēdzienu.
Pirmajā piemērā mēs redzēsim ne-virtuālās funkcijas uzvedību, un pēc tam otrajā piemērā mēs izskaidrosim virtuālās funkcijas uzvedību.
1. piemērs
Šajā koda piemērā mums ir divas klases: bāzes klase un atvasinātā klase.
Bāzes klasei ir dalībnieka funkcija, t.i.e., displejs (). Atvasinātā klase tiek mantota no bāzes klases un no jauna definē display () funkciju.
Tad mēs esam deklarējuši rādītāju bāzes klases tipam un piešķīruši atvasinātās klases objektu. Tātad, kad mēs izsauksim display () funkciju, izmantojot bāzes klases tipa rādītāju, tiks izsaukta bāzes klases funkcija. Jūs varat redzēt izeju zemāk.
Bet šādos gadījumos C ++ nodrošina veidu, kā izsaukt atvasināto klases funkciju, pasludinot bāzes klases funkciju par virtuālu. Mēs redzēsim vēl vienu piemēru, lai to saprastu.
# iekļautizmantojot nosaukumvietu std;
klase Base_Class
publiski:
tukšs displejs ()
cout << "I am in Base class" << endl;
;
klase Derived_Class: publiskā Base_Class
publiski:
tukšs displejs ()
cout << "I am in Derived class"
2. piemērs
Šajā piemērā mēs esam definējuši display () funkciju kā virtuālo funkciju bāzes klasē. Vienīgā atšķirība no iepriekšējās programmas ir tā, ka bāzes klasē “void display ()” esam pievienojuši virtuālu atslēgvārdu.
Ja redzat izvadi, tas izdrukā: “Es esmu atvasinātā klasē”, kas norāda, ka atvasinātās klases funkcija tiek izsaukta.
Virtuālais atslēgvārds (virtuālā funkcija) bāzes klasē ir atbildīgs par to, lai objektam tiktu izsaukta pareizā funkcija.
# iekļautizmantojot nosaukumvietu std;
klase Base_Class
publiski:
virtuālā tukšuma displejs ()
cout << "I am in Base class" << endl;
;
klase Derived_Class: publiskā Base_Class
publiski:
tukšs displejs ()
cout << "I am in Derived class"
3. piemērs
Šis ir vēl viens virtuālās funkcijas piemērs. Kā redzat zemāk esošajā programmā, mēs esam definējuši bāzes klasi, t.i.e., Dzīvnieks. Ir divas atvasinātas klases: suns un govs. Funkciju eat () esam definējuši kā virtuālu bāzes klasē, t.e., Dzīvnieks. Pēc tam mēs esam atkārtoti definējuši ēd () funkciju abās atvasinātajās klasēs - suns un govs. Galvenajā () funkcijā mums ir bāzes klases rādītājs, t.i.e., Dzīvnieks, un pēc tam pievienoja atvasināto klasi Suns. Tātad, izsaucot funkciju eat (), izmantojot bāzes klases rādītāju, mēs varam izsaukt atvasinātās klases eat () versijas versiju, t.e., funkcija ēst () no suņu klases. Līdzīgi, pievienojot objektu Cow class, mēs pēc tam varam izsaukt funkcijas eat () atvasināto klases versiju, t.e., funkcija ēst () no klases Govs. Zemāk redzamajā izejā varat skaidri redzēt šo uzvedību.
# iekļautizmantojot nosaukumvietu std;
klases dzīvnieks
publiski:
virtuāls tukšums ēst ()
cout << "Animal - base class - undefined eating behavior." << endl;
;
klases suns: publisks dzīvnieks
publiski:
anulēt ēst ()
cout << "Dog - eat non-veg!" << endl;
;
klase Govs: publisks dzīvnieks
publiski:
anulēt ēst ()
cout << "Cow - eat veg!"
a_ptr-> ēst ();
atgriešanās 0;
Secinājums
Šajā rakstā es esmu izskaidrojis virtuālās funkcijas jēdzienu C++. C ++ atbalsta dažāda veida polimorfismu - statisko polimorfismu un dinamisko polimorfismu. Ar virtuālās funkcijas palīdzību mēs varam sasniegt izpildlaika / dinamisko polimorfismu. Šajā rakstā mēs esam apskatījuši tikai virtuālās funkcijas jēdzienu un to, kā sasniegt izpildlaika polimorfismu. Es izskaidroju trīs darba piemērus, lai izskaidrotu virtuālo funkciju.