C ++

C ++ virtuālā funkcija

C ++ virtuālā funkcija
Šajā rakstā mēs apspriedīsim virtuālo funkciju C ++ programmēšanas valodā. Virtuālā funkcija tiek izmantota C ++, lai sasniegtu izpildlaika / dinamisko polimorfismu. Mēs redzēsim vairākus piemērus, lai izprastu virtuālās funkcijas jēdzienu C++.

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ļaut
izmantojot 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" atgriešanās 0;

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ļaut
izmantojot 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" atgriešanās 0;

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ļaut
izmantojot 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 = jauna govs ();
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.

Komerciālo spēļu dzinēju atvērtā koda porti
Bezmaksas, atvērtā koda un starpplatformu spēļu dzinēju atpūtu var izmantot, lai spēlētu vecos, kā arī dažus no diezgan nesenajiem spēļu nosaukumiem. ...
Labākās komandrindas spēles Linux
Komandrinda nav tikai lielākais sabiedrotais, lietojot Linux, bet tā var būt arī izklaides avots, jo to var izmantot, lai spēlētu daudzas jautras spēl...
Labākās Linux spēļu gamepad kartēšanas lietotnes
Ja jums patīk spēlēt spēles Linux ar parastu tastatūru, nevis parasto tastatūru un peles ievades sistēmu, jums ir dažas noderīgas lietotnes. Daudzas d...