C ++

C ++ virtuális funkció

C ++ virtuális funkció
Ebben a cikkben a virtuális függvényt tárgyaljuk a C ++ programozási nyelven. Virtuális függvényt használunk a C ++ - ban a futásidejű / dinamikus polimorfizmus elérésére. Számos példát fogunk látni a virtuális függvény fogalmának megértéséhez C-ben++.

A virtuális függvény olyan tagfüggvény, amelyet az alaposztályban / szülőosztályban definiálnak, és a származtatott osztályban újra definiálnak. A virtuális függvény lehetővé teszi a függvény származtatott osztályváltozatának meghívását a referencia vagy a mutató segítségével az alaposztályra.

Nézzünk meg néhány példát a virtuális függvény fogalmának megértéséhez.

Az első példában a nem virtuális függvény viselkedését, majd a második példában a virtuális függvény viselkedését mutatjuk be.

1. példa

A következő példakódban két osztályunk van: alaposztály és származtatott osztály.

Az alaposztály tagfunkcióval rendelkezik, azaz.e., kijelző(). A származtatott osztály öröklődik az alaposztálytól, és újradefiniálja a display () függvényt.

Ezután deklaráltunk egy mutatót az alaposztály típusához, és hozzárendeltünk egy objektumot a származtatott osztályhoz. Tehát, amikor az alaposztály típusú mutató használatával meghívjuk a display () függvényt, akkor meghívásra kerül az alaposztály függvény. Az alábbiakban láthatja a kimenetet.

De ilyen esetekben a C ++ lehetőséget nyújt a származtatott osztályfüggvény meghívására azáltal, hogy az alaposztályfüggvényt virtuálisnak nyilvánítja. Újabb példát fogunk látni ennek megértésére.

#include
névtér használata std;
osztály Base_Class

nyilvános:
érvénytelen kijelző ()

cout << "I am in Base class" << endl;

;
osztály Derived_Class: nyilvános Base_Class

nyilvános:
érvénytelen kijelző ()

cout << "I am in Derived class" visszatér 0;

2. példa

Ebben a példában a display () függvényt virtuális függvényként definiáltuk az alaposztályban. Az egyetlen különbség az előző programhoz képest az, hogy az alaposztályban virtuális kulcsszót adtunk az „void display ()” elé.

Most, ha látja a kimenetet, kiírja a következőt: „Én levezetett osztályba tartozom”, ami azt jelzi, hogy a származtatott osztályfüggvényt meghívjuk.

Az alaposztály virtuális kulcsszava (virtuális függvény) felelős annak biztosításáért, hogy egy objektumhoz a megfelelő függvényt hívják meg.

#include
névtér használata std;
osztály Base_Class

nyilvános:
virtuális üresség megjelenítése ()

cout << "I am in Base class" << endl;

;
osztály Derived_Class: nyilvános Base_Class

nyilvános:
érvénytelen kijelző ()

cout << "I am in Derived class" visszatér 0;

3. példa

Ez egy újabb példa a virtuális függvényre. Mint az alábbi programban láthatja, meghatároztunk egy alaposztályt, azaz.e., Állat. Két származtatott osztály létezik: Kutya és Tehén. Az eat () függvényt virtuálisnak definiáltuk az alaposztályban, azaz.e., Állat. Ezután újradefiniáltuk az eat () függvényt mind a származtatott osztályokban, mind a Kutya és a Tehén esetében.  A main () függvényben az alaposztály mutatója van, azaz.e., Állat, majd csatolta a származtatott osztályt, a kutyát. Tehát, amikor meghívjuk az eat () függvényt az alaposztály mutató segítségével, akkor meghívhatjuk az eat () függvény származtatott osztályváltozatát.e., az eat () függvény a Dog osztályból. Hasonlóképpen, amikor a Cow class objektumot csatoljuk, akkor meghívhatjuk az eat () függvény származtatott osztály verzióját, azaz.e., a eat () függvény a Tehén osztályból. Az alábbi kimeneten jól látható ez a viselkedés. 

#include
névtér használata std;
osztályú állat

nyilvános:
virtuális void eat ()

cout << "Animal - base class - undefined eating behavior." << endl;

;
osztályos kutya: nyilvános állat

nyilvános:
érvénytelen enni ()

cout << "Dog - eat non-veg!" << endl;

;
osztály Tehén: közállat

nyilvános:
érvénytelen enni ()

cout << "Cow - eat veg!" a_ptr = új tehén ();
a_ptr-> eszik ();
visszatér 0;

Következtetés

Ebben a cikkben elmagyaráztam a virtuális függvény fogalmát a C-ben++. A C ++ különböző típusú polimorfizmusokat támogat - a statikus polimorfizmust és a dinamikus polimorfizmust. Virtuális függvény segítségével elérhetjük a futásidejű / dinamikus polimorfizmust. Ebben a cikkben csak a virtuális funkció fogalmát vizsgáltuk, és azt, hogy miként lehet elérni a futásidejű polimorfizmust. Három működő példát ismertettem a virtuális funkció magyarázatára.

A Doom telepítése és lejátszása Linuxon
Bevezetés a Doom-ba A Doom sorozat a 90-es években keletkezett az eredeti Doom megjelenése után. Azonnali sláger volt, és ettől kezdve a játéksorozat ...
Vulkan Linux felhasználók számára
A grafikus kártyák minden új generációjával azt látjuk, hogy a játékfejlesztők átlépik a grafikus hűség határait, és egy lépéssel közelebb kerülnek a ...
OpenTTD vs Simutrans
Saját közlekedési szimuláció létrehozása szórakoztató, pihentető és rendkívül csábító lehet. Ezért meg kell győződnie arról, hogy a lehető legtöbb ját...