Virtuálna funkcia je členská funkcia, ktorá je definovaná v základnej triede / nadradenej triede a nanovo definovaná v odvodenej triede. Virtuálna funkcia umožňuje volanie verzie funkcie odvodenej triedy pomocou odkazu alebo ukazovateľa na základnú triedu.
Pozrime sa na niekoľko príkladov na pochopenie pojmu virtuálna funkcia.
V prvom príklade uvidíme správanie nevirtuálnej funkcie a potom v druhom príklade vysvetlíme správanie sa virtuálnej funkcie.
Príklad 1
V nasledujúcom príklade kódu máme dve triedy: základnú triedu a odvodenú triedu.
Základná trieda má členskú funkciu, t.j.e., display (). Odvodená trieda sa dedí zo základnej triedy a predefinovala funkciu display ().
Potom sme deklarovali smerník na typ základnej triedy a priradili sme objekt odvodenej triedy. Keď teda zavoláme funkciu display () pomocou ukazovateľa typu základnej triedy, bude sa volať funkcia základnej triedy. Výstup si môžete pozrieť nižšie.
Ale v takýchto prípadoch C ++ poskytuje spôsob volania funkcie odvodenej triedy vyhlásením funkcie základnej triedy za virtuálnu. Uvidíme ďalší príklad, ktorý to pochopí.
#includepomocou namespace std;
trieda Base_Class
verejné:
neplatné zobrazenie ()
cout << "I am in Base class" << endl;
;
trieda Derived_Class: verejná Base_Class
verejné:
neplatné zobrazenie ()
cout << "I am in Derived class"
Príklad 2
V tomto príklade sme v základnej triede definovali funkciu display () ako virtuálnu funkciu. Jediný rozdiel oproti predchádzajúcemu programu je v tom, že sme do základnej triedy pridali virtuálne kľúčové slovo pred „void display ()“.
Teraz, ak vidíte výstup, vytlačí sa text „Som v odvodenej triede“, čo naznačuje, že funkcia odvodenej triedy sa volá.
Virtuálne kľúčové slovo (virtuálna funkcia) v základnej triede je zodpovedné za zabezpečenie volania správnej funkcie pre objekt.
#includepomocou namespace std;
trieda Base_Class
verejné:
zobrazenie virtuálnych prázdnin ()
cout << "I am in Base class" << endl;
;
trieda Derived_Class: verejná Base_Class
verejné:
neplatné zobrazenie ()
cout << "I am in Derived class"
Príklad 3
Toto je ďalší príklad virtuálnej funkcie. Ako môžete vidieť v nasledujúcom programe, definovali sme základnú triedu, t.j.e., Zviera. Existujú dve odvodené triedy: pes a krava. Funkciu eat () sme v základnej triede definovali ako virtuálnu, t.e., Zviera. Potom sme predefinovali funkciu eat () v oboch odvodených triedach, Dog a Cow. Vo funkcii main () máme ukazovateľ základnej triedy, t.j.e., Zviera, a potom pripojil odvodenú triedu, Pes. Keď teda zavoláme funkciu eat () pomocou ukazovateľa základnej triedy, môžeme vyvolať odvodenú verziu verzie funkcie eat (), i.e., funkcia eat () z triedy Dog. Podobne, keď pripojíme objekt triedy Cow, môžeme potom vyvolať odvodenú triednu verziu funkcie eat (), t.e., funkcia eat () z triedy Krava. Toto správanie môžete zreteľne vidieť na výstupe nižšie.
#includepomocou namespace std;
trieda Zviera
verejné:
virtuálna prázdnota jesť ()
cout << "Animal - base class - undefined eating behavior." << endl;
;
trieda Pes: verejné Zviera
verejné:
neplatné jesť ()
cout << "Dog - eat non-veg!" << endl;
;
trieda Krava: verejné Zviera
verejné:
neplatné jesť ()
cout << "Cow - eat veg!"
a_ptr-> jesť ();
návrat 0;
Záver
V tomto článku som vysvetlil koncept virtuálnej funkcie v jazyku C++. C ++ podporuje rôzne typy polymorfizmu - statický polymorfizmus a dynamický polymorfizmus. Pomocou virtuálnej funkcie môžeme dosiahnuť runtime / dynamický polymorfizmus. V tomto článku sme sa zaoberali iba konceptom virtuálnej funkcie a tým, ako dosiahnuť runtime polymorfizmus. Vysvetlil som tri pracovné príklady na vysvetlenie virtuálnej funkcie.