Una funzione virtuale è una funzione membro definita nella classe base/classe padre e ridefinita nella classe derivata. La funzione virtuale consente di chiamare la versione della classe derivata della funzione utilizzando il riferimento o il puntatore alla classe base.
Vediamo alcuni esempi per capire il concetto di funzione virtuale.
Nel primo esempio vedremo il comportamento della funzione non virtuale, quindi nel secondo esempio spiegheremo il comportamento di una funzione virtuale.
Esempio 1
Nel seguente codice di esempio, abbiamo due classi: classe base e classe derivata.
La classe base ha una funzione membro, i.e., Schermo(). La classe derivata è ereditata dalla classe base e ha ridefinito la funzione display().
Quindi, abbiamo dichiarato un puntatore al tipo di classe base e assegnato un oggetto della classe derivata. Quindi, quando chiamiamo la funzione display() usando il puntatore del tipo di classe base, verrà chiamata la funzione della classe base. Puoi vedere l'output qui sotto.
Ma, in tali casi, C++ fornisce un modo per chiamare la funzione della classe derivata dichiarando la funzione della classe base come virtuale. Vedremo un altro esempio per capirlo.
#includereusando lo spazio dei nomi std;
class Base_Class
pubblico:
display vuoto()
cout << "I am in Base class" << endl;
;
class Classe_derivata:Classe_base pubblica
pubblico:
display vuoto()
cout << "I am in Derived class"
Esempio 2
In questo esempio, abbiamo definito la funzione display() come una funzione virtuale nella classe base. L'unica differenza rispetto al programma precedente è che abbiamo aggiunto una parola chiave virtuale davanti a "void display()" nella classe base.
Ora, se vedi l'output, stampa "Sono in una classe derivata", che indica che la funzione della classe derivata è chiamata.
La parola chiave virtual (funzione virtuale) nella classe base è responsabile di garantire che venga chiamata la funzione giusta per un oggetto.
#includereusando lo spazio dei nomi std;
class Base_Class
pubblico:
display vuoto virtuale()
cout << "I am in Base class" << endl;
;
class Classe_derivata:Classe_base pubblica
pubblico:
display vuoto()
cout << "I am in Derived class"
Esempio 3
Questo è un altro esempio di funzione virtuale. Come puoi vedere nel programma sottostante, abbiamo definito una classe base, i.e., Animale. Ci sono due classi derivate: Cane e Mucca. Abbiamo definito la funzione eat() come virtuale nella classe base, i.e., Animale. Abbiamo quindi ridefinito la funzione eat() in entrambe le classi derivate, Dog e Cow. Nella funzione main(), abbiamo un puntatore della classe base, i.e., Animal, e poi ha attaccato la classe derivata, Dog. Quindi, quando chiamiamo la funzione eat() usando il puntatore della classe base, possiamo invocare la versione della classe derivata della funzione eat(), i.e., la funzione eat() dalla classe Dog. Allo stesso modo, quando alleghiamo l'oggetto classe Cow, possiamo quindi invocare la versione della classe derivata della funzione eat(), i.e., la funzione eat() dalla classe Cow. Puoi vedere chiaramente questo comportamento nell'output qui sotto.
#includereusando lo spazio dei nomi std;
classe animale
pubblico:
vuoto virtuale mangia()
cout << "Animal - base class - undefined eating behavior." << endl;
;
classe Cane:animale pubblico
pubblico:
vuoto mangiare()
cout << "Dog - eat non-veg!" << endl;
;
classe Mucca: animale pubblico
pubblico:
vuoto mangiare()
cout << "Cow - eat veg!"
a_ptr->mangia();
restituisce 0;
Conclusione
In questo articolo ho spiegato il concetto di funzione virtuale in Do++. Il C++ supporta diversi tipi di polimorfismo: polimorfismo statico e polimorfismo dinamico. Con l'aiuto di una funzione virtuale, possiamo ottenere il polimorfismo runtime/dinamico. In questo articolo, abbiamo esaminato solo il concetto di funzione virtuale e come ottenere il polimorfismo di runtime. Ho spiegato tre esempi di lavoro per spiegare la funzione virtuale.