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.
#includené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"
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.
#includené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"
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.
#includené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-> 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.