Funzione virtuale C ++

Funzione virtuale C ++
In questo articolo, discuteremo della funzione virtuale nel linguaggio di programmazione C ++. Una funzione virtuale viene utilizzata in C ++ per ottenere il polimorfismo di runtime/dinamico. Vedremo diversi esempi per comprendere il concetto di funzione virtuale in c++.

Una funzione virtuale è una funzione membro che è definita nella classe di base/classe genitore 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 comprendere il concetto di funzione virtuale.

Nel primo esempio, vedremo il comportamento della funzione non virtuale, e poi 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 ridefinita 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, la funzione di classe base verrà chiamata. Puoi vedere l'output di seguito.

Ma, in tali casi, C ++ fornisce un modo per chiamare la funzione di classe derivata dichiarando la funzione della classe base come virtuale. Vedremo un altro esempio per capirlo.

#includere
Utilizzo dello spazio dei nomi std;
Classe Base_Class

pubblico:
vuoto display ()

cout << "I am in Base class" << endl;

;
Classe Derited_Class: Public Base_Class

pubblico:
vuoto display ()

cout << "I am in Derived class" restituzione 0;

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 di fronte a "void display ()" nella classe base.

Ora, se vedi l'output, stampa "Sono in classe derivata", il che indica che la funzione di classe derivata è chiamata.

La parola chiave virtuale (funzione virtuale) nella classe base è responsabile per garantire che la funzione giusta sia chiamata per un oggetto.

#includere
Utilizzo dello spazio dei nomi std;
Classe Base_Class

pubblico:
Virtual void display ()

cout << "I am in Base class" << endl;

;
Classe Derited_Class: Public Base_Class

pubblico:
vuoto display ()

cout << "I am in Derived class" restituzione 0;

Esempio 3

Questo è un altro esempio di una funzione virtuale. Come puoi vedere nel programma seguente, abbiamo definito una classe di base, io.e., Animale. Ci sono due lezioni 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, cane e mucca. Nella funzione principale (), abbiamo un puntatore della classe base, i.e., Animale, e poi attaccato la classe derivata, cane. Quindi, quando chiamiamo la funzione Eat () usando il puntatore della classe base, possiamo invocare la versione di classe derivata della funzione EAT (), i.e., La funzione Eat () dalla classe del cane. Allo stesso modo, quando allegiamo l'oggetto della classe di mucca, possiamo quindi invocare la versione di classe derivata della funzione EAT (), i.e., La funzione Eat () dalla classe di mucca. Puoi vedere chiaramente questo comportamento nell'output di seguito.

#includere
Utilizzo dello spazio dei nomi std;
animale di classe

pubblico:
Virtual void Eat ()

cout << "Animal - base class - undefined eating behavior." << endl;

;
Cane di classe: animale pubblico

pubblico:
vuoto Eat ()

cout << "Dog - eat non-veg!" << endl;

;
Cow di classe: animale pubblico

pubblico:
vuoto Eat ()

cout << "Cow - eat veg!" a_ptr = new cow ();
a_ptr-> eat ();
restituzione 0;

Conclusione

In questo articolo, ho spiegato il concetto di funzione virtuale in C++. Il C ++ supporta diversi tipi di polimorfismo - polimorfismo statico e polimorfismo dinamico. Con l'aiuto di una funzione virtuale, possiamo ottenere il polimorfismo di 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.