C ++

C ++ virtuální funkce

C ++ virtuální funkce
V tomto článku budeme diskutovat o virtuální funkci v programovacím jazyce C ++. V C ++ se používá virtuální funkce k dosažení běhového / dynamického polymorfismu. Uvidíme několik příkladů, abychom pochopili koncept virtuální funkce v C++.

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.

#zahrnout
pomocí 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" návrat 0;

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.

#zahrnout
pomocí 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" návrat 0;

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. 

#zahrnout
pomocí 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 = nová kráva ();
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.

Hry Jak zobrazit překrytí OSD v linuxových aplikacích a hrách na celou obrazovku
Jak zobrazit překrytí OSD v linuxových aplikacích a hrách na celou obrazovku
Hraní her na celou obrazovku nebo používání aplikací v režimu celé obrazovky bez rozptýlení vás mohou odříznout od příslušných systémových informací v...
Hry Top 5 karet pro zachycení hry
Top 5 karet pro zachycení hry
Všichni jsme viděli a milovali streamování her na YouTube. PewDiePie, Jakesepticye a Markiplier jsou jen někteří z nejlepších hráčů, kteří vydělali mi...
Hry Jak vyvíjet hru na Linuxu
Jak vyvíjet hru na Linuxu
Před deseti lety by jen málo uživatelů Linuxu předpovídalo, že jejich oblíbený operační systém bude jednoho dne populární herní platformou pro komerčn...