Une fonction virtuelle est une fonction membre qui est définie dans la classe de base/classe parent et redéfinie dans la classe dérivée. La fonction virtuelle permet d'appeler la version de classe dérivée de la fonction en utilisant la référence ou le pointeur vers la classe de base.
Voyons quelques exemples pour comprendre le concept de fonction virtuelle.
Dans le premier exemple, nous verrons le comportement de la fonction non virtuelle, puis dans le deuxième exemple, nous expliquerons le comportement d'une fonction virtuelle.
Exemple 1
Dans l'exemple de code suivant, nous avons deux classes : la classe de base et la classe dérivée.
La classe de base a une fonction membre, je.e., affichage(). La classe dérivée est héritée de la classe de base et redéfinie la fonction display().
Ensuite, nous avons déclaré un pointeur vers le type de classe de base et affecté un objet de la classe dérivée. Ainsi, lorsque nous appelons la fonction display() en utilisant le pointeur de type de classe de base, la fonction de classe de base sera appelée. Vous pouvez voir la sortie ci-dessous.
Mais, dans de tels cas, C++ fournit un moyen d'appeler la fonction de classe dérivée en déclarant la fonction de classe de base comme virtuelle. Nous verrons un autre exemple pour comprendre cela.
#inclureen utilisant l'espace de noms std ;
classe Base_Class
Publique:
affichage vide()
cout << "I am in Base class" << endl;
;
classe Derived_Class:public Base_Class
Publique:
affichage vide()
cout << "I am in Derived class"
Exemple 2
Dans cet exemple, nous avons défini la fonction display() comme une fonction virtuelle dans la classe de base. La seule différence par rapport au programme précédent est que nous avons ajouté un mot-clé virtuel devant « void display() » dans la classe de base.
Maintenant, si vous voyez la sortie, elle affiche "Je suis dans la classe dérivée", ce qui indique que la fonction de classe dérivée est appelée.
Le mot-clé virtual (virtual function) dans la classe de base est chargé de s'assurer que la bonne fonction est appelée pour un objet.
#inclureen utilisant l'espace de noms std ;
classe Base_Class
Publique:
affichage du vide virtuel()
cout << "I am in Base class" << endl;
;
classe Derived_Class:public Base_Class
Publique:
affichage vide()
cout << "I am in Derived class"
Exemple 3
Ceci est un autre exemple de fonction virtuelle. Comme vous pouvez le voir dans le programme ci-dessous, nous avons défini une classe de base, i.e., Animal. Il existe deux classes dérivées : Chien et Vache. Nous avons défini la fonction eat() comme virtuelle dans la classe de base, i.e., Animal. Nous avons ensuite redéfini la fonction eat() dans les deux classes dérivées, Dog et Cow. Dans la fonction main(), nous avons un pointeur de la classe de base, i.e., Animal, puis attaché la classe dérivée, Dog. Ainsi, lorsque nous appelons la fonction eat() à l'aide du pointeur de classe de base, nous pouvons invoquer la version de classe dérivée de la fonction eat(), i.e., la fonction eat() de la classe Dog. De même, lorsque nous attachons l'objet de classe Cow, nous pouvons alors invoquer la version de classe dérivée de la fonction eat(), i.e., la fonction eat() de la classe Cow. Vous pouvez clairement voir ce comportement dans la sortie ci-dessous.
#inclureen utilisant l'espace de noms std ;
classe Animal
Publique:
vide virtuel manger ()
cout << "Animal - base class - undefined eating behavior." << endl;
;
Classe Chien: Animal public
Publique:
vide manger ()
cout << "Dog - eat non-veg!" << endl;
;
classe Vache: Animal public
Publique:
vide manger ()
cout << "Cow - eat veg!"
a_ptr-> manger();
renvoie 0 ;
Conclusion
Dans cet article, j'ai expliqué le concept de fonction virtuelle en C++. Le C++ prend en charge différents types de polymorphisme - polymorphisme statique et polymorphisme dynamique. A l'aide d'une fonction virtuelle, nous pouvons réaliser le polymorphisme runtime/dynamique. Dans cet article, nous n'avons examiné que le concept de fonction virtuelle et comment réaliser le polymorphisme d'exécution. J'ai expliqué trois exemples de travail pour expliquer la fonction virtuelle.