O funcție virtuală este o funcție membru care este definită în clasa de bază / clasa părinte și redefinită în clasa derivată. Funcția virtuală permite apelarea versiunii clasei derivate a funcției folosind referința sau indicatorul către clasa de bază.
Să vedem câteva exemple pentru a înțelege conceptul de funcție virtuală.
În primul exemplu, vom vedea comportamentul funcției non-virtuale, iar apoi în al doilea exemplu, vom explica comportamentul unei funcții virtuale.
Exemplul 1
În următorul exemplu de cod, avem două clase: clasa de bază și clasa derivată.
Clasa de bază are o funcție de membru, i.e., afişa(). Clasa derivată este moștenită din clasa de bază și redefinită funcția display ().
Apoi, am declarat un pointer tipului clasei de bază și i-am atribuit un obiect al clasei derivate. Deci, când apelăm funcția display () utilizând pointerul de tip clasă de bază, funcția de clasă de bază va fi apelată. Puteți vedea rezultatul de mai jos.
Dar, în astfel de cazuri, C ++ oferă o modalitate de a apela funcția de clasă derivată declarând funcția de clasă de bază ca virtuală. Vom vedea un alt exemplu pentru a înțelege acest lucru.
#includefolosind spațiul de nume std;
clasa Base_Class
public:
afișare nulă ()
cout << "I am in Base class" << endl;
;
clasa Derived_Class: public Base_Class
public:
afișare nulă ()
cout << "I am in Derived class"
Exemplul 2
În acest exemplu, am definit funcția display () ca o funcție virtuală în clasa de bază. Singura diferență față de programul anterior este că am adăugat un cuvânt cheie virtual în fața „void display ()” în clasa de bază.
Acum, dacă vedeți rezultatul, acesta imprimă „Sunt în clasa derivată”, ceea ce indică faptul că funcția de clasă derivată este numită.
Cuvântul cheie virtual (funcția virtuală) din clasa de bază este responsabil pentru a se asigura că funcția potrivită este apelată pentru un obiect.
#includefolosind spațiul de nume std;
clasa Base_Class
public:
afișare virtuală nulă ()
cout << "I am in Base class" << endl;
;
clasa Derived_Class: public Base_Class
public:
afișare nulă ()
cout << "I am in Derived class"
Exemplul 3
Acesta este un alt exemplu de funcție virtuală. După cum puteți vedea în programul de mai jos, am definit o clasă de bază, i.e., Animal. Există două clase derivate: câine și vacă. Am definit funcția eat () ca virtuală în clasa de bază, i.e., Animal. Am redefinit apoi funcția eat () în ambele clase derivate, Dog și Cow. În funcția main (), avem un indicator al clasei de bază, i.e., Animal, apoi a atașat clasa derivată, Dog. Deci, când apelăm funcția eat () folosind pointerul clasei de bază, putem invoca versiunea clasă derivată a funcției eat (), i.e., funcția eat () din clasa Dog. În mod similar, atunci când atașăm obiectul de clasă Cow, putem invoca apoi versiunea de clasă derivată a funcției eat (), i.e., funcția eat () din clasa Cow. Puteți vedea clar acest comportament în rezultatul de mai jos.
#includefolosind spațiul de nume std;
clasa Animal
public:
gol nul virtual ()
cout << "Animal - base class - undefined eating behavior." << endl;
;
clasă Câine: Animal public
public:
void eat ()
cout << "Dog - eat non-veg!" << endl;
;
clasa Vaca: Animal public
public:
void eat ()
cout << "Cow - eat veg!"
a_ptr-> eat ();
retur 0;
Concluzie
În acest articol, am explicat conceptul de funcție virtuală în C++. C ++ acceptă diferite tipuri de polimorfism - polimorfism static și polimorfism dinamic. Cu ajutorul unei funcții virtuale, putem realiza polimorfismul runtime / dinamic. În acest articol, ne-am uitat doar la conceptul de funcție virtuală și la modul de realizare a polimorfismului în timpul rulării. Am explicat trei exemple de lucru pentru a explica funcția virtuală.