Skip to main content

Mi az a virtuális funkció?

A virtuális függvény egy szuperosztályban meghatározott függvény, amelynek egy alosztályban kell lennie, hogy az alosztály teljes osztály meghatározásával rendelkezzen.A virtuális funkciók egy objektum-orientált programozási paradigmára támaszkodnak, amelyet virtuális öröklésnek neveznek, amelyet a Virtuális kulcsszó használatával leggyakrabban a C ++ -ban látnak.A virtuális funkció meghatározásához két osztályra van szükség, egy szuperosztály és egy alosztály.A szuperosztályban a funkciót először deklarálják, és esetleg meghatározzák.Az alosztályban a függvény meghatározása van, és mdash;vagy felülbírálva, attól függően, hogy a függvényt a szuperosztályban definiálták -e.

A virtuális függvény kétféle módon definiálható.Először is meghatározható csonkként, amelyben üres teste van, és semmit sem tesz.Másodszor, tiszta virtuális függvényként definiálható, ahol a SuperClasss fejlécfájlban nullaként definiálható.

Mindkét módszernek vannak előnyei és hátrányai.A függvény stub -ként történő meghatározása biztosítja, hogy az összes alosztály valamilyen megvalósítását végezze, még akkor is, ha nem tesz semmit.Ha valaki elfelejti felülbírálni a funkciót, és megfelelően végrehajtani azt egy alosztályban, akkor nem tűnik úgy, hogy ezt nem hibák vagy figyelmeztetések mutatják.A tiszta virtuális funkció meghatározása viszont minden alosztálytól megköveteli, hogy rendelkezzen a függvényre vonatkozóan, és a hibák megjelennek, ha ez nem így van.A virtuális funkciók, tehát az öröklési hierarchiák, amelyeknél több szintnél több, nem igényelnek a virtuális funkciók kifejezett meghatározását.Például, figyelembe lehet venni egy A osztályt, amely egy virtuális funkciót deklarál, amelyet a B. alosztályban valósítanak megA B osztályból származó meghatározás a C osztály felülbírálhatja a BS osztály funkcióját, vagy felülbírálhatja a BS osztály funkcióját, miközben felhívhatja.

A másik szélsőségesen a virtuális funkciókat nem kell egy alosztályban meghatározni, ha az alosztályban virtuálisnak nyilvánítják őket.Például figyelembe lehet venni egy A osztályt, amely virtuális funkciót deklarál, és két alosztályt tartalmaz, a B és a C -vel. Ezenkívül el lehet képzelni, hogy a B osztály D és E alosztályai vannakA B -n keresztül mind az osztálynak rendelkeznie kell, mivel a virtuális funkció valamilyen módon meghatározható.Ha a B osztálynak a funkciójának megvalósítása van, akkor a D és az E osztálynak nem kell újjáélesztenie.Lehet, hogy a CS alosztályoknak funkcióként kell végrehajtaniuk, de mindkettő mást csinál, tehát a funkció meghatározása maga a C osztályban nem lenne hasznos.Ebben az esetben a funkciót virtuálisnak lehet nyilvánítani a C osztályban, és a megvalósítás nem szükséges.-Számos buktató van a virtuális funkciókkal, különös tekintettel a többszörös öröklésre.A többszörös öröklés során a kétértelműen meghatározott virtuális funkciók ütközhetnek egymással, ezért ezeket óvatosan kell felhasználni ebben az összefüggésben.