Virtuální funkce je členská funkce, která je definována v základní třídě / nadřazené třídě a znovu definována v odvozené třídě. Virtuální funkce umožňuje volání verze odvozené třídy funkce pomocí odkazu nebo ukazatele na základní třídu.
Podívejme se na několik příkladů k pochopení pojmu virtuální funkce.
V prvním příkladu uvidíme chování nevirtuální funkce a ve druhém příkladu vysvětlíme chování virtuální funkce.
Příklad 1
V následujícím příkladu kódu máme dvě třídy: základní třídu a odvozenou třídu.
Základní třída má členskou funkci, tj.E., Zobrazit(). Odvozená třída se dědí ze základní třídy a předefinuje funkci display ().
Poté jsme deklarovali ukazatel na typ základní třídy a přiřadili objekt odvozené třídy. Když tedy zavoláme funkci display () pomocí ukazatele typu základní třídy, bude volána funkce základní třídy. Níže vidíte výstup.
V takových případech však C ++ poskytuje způsob volání funkce odvozené třídy deklarováním funkce základní třídy jako virtuální. Uvidíme další příklad, abychom tomu porozuměli.
#zahrnoutpomocí jmenného prostoru std;
třída Base_Class
veřejnost:
void display ()
cout << "I am in Base class" << endl;
;
třída Derived_Class: veřejná Base_Class
veřejnost:
void display ()
cout << "I am in Derived class"
Příklad 2
V tomto příkladu jsme definovali funkci display () jako virtuální funkci v základní třídě. Jediný rozdíl oproti předchozímu programu je v tom, že jsme přidali virtuální klíčové slovo před „void display ()“ v základní třídě.
Nyní, když vidíte výstup, vytiskne: „Jsem v odvozené třídě“, což znamená, že funkce odvozené třídy se nazývá.
Virtuální klíčové slovo (virtuální funkce) v základní třídě je odpovědné za zajištění volání správné funkce pro objekt.
#zahrnoutpomocí jmenného prostoru std;
třída Base_Class
veřejnost:
zobrazení virtuálních prázdnin ()
cout << "I am in Base class" << endl;
;
třída Derived_Class: veřejná Base_Class
veřejnost:
void display ()
cout << "I am in Derived class"
Příklad 3
Toto je další příklad virtuální funkce. Jak vidíte v níže uvedeném programu, definovali jsme základní třídu, tj.E., Zvíře. Existují dvě odvozené třídy: pes a kráva. V základní třídě jsme definovali funkci eat () jako virtuální, tj.E., Zvíře. Poté jsme předefinovali funkci eat () v obou odvozených třídách, Dog a Cow. Ve funkci main () máme ukazatel základní třídy, tj.E., Zvíře, a poté připojil odvozenou třídu, Pes. Když tedy voláme funkci eat () pomocí ukazatele základní třídy, můžeme vyvolat odvozenou verzi třídy funkce eat (), i.E., funkce eat () z třídy Dog. Podobně, když připojíme objekt třídy Cow, můžeme vyvolat odvozenou verzi třídy funkce eat (), tj.E., funkce eat () ze třídy Kráva. Toto chování můžete jasně vidět na výstupu níže.
#zahrnoutpomocí jmenného prostoru std;
třída Zvíře
veřejnost:
virtuální prázdnota jíst ()
cout << "Animal - base class - undefined eating behavior." << endl;
;
třída Pes: veřejné Zvíře
veřejnost:
void eat ()
cout << "Dog - eat non-veg!" << endl;
;
třída Kráva: veřejné zvíře
veřejnost:
void eat ()
cout << "Cow - eat veg!"
a_ptr-> eat ();
návrat 0;
Závěr
V tomto článku jsem vysvětlil koncept virtuální funkce v jazyce C++. C ++ podporuje různé typy polymorfismu - statický polymorfismus a dynamický polymorfismus. Pomocí virtuální funkce můžeme dosáhnout runtime / dynamického polymorfismu. V tomto článku jsme se podívali pouze na koncept virtuální funkce a na to, jak dosáhnout běhového polymorfismu. Vysvětlil jsem tři pracovní příklady vysvětlující virtuální funkci.