Fonction virtuelle en C++

Une fonction virtuelle est une fonction membre déclarée dans une classe de base et redéfinie par une classe dérivée. Lorsque vous vous référez à un objet de classe dérivée à l’aide d’un pointeur ou d’une référence à la classe de base, vous pouvez appeler une fonction virtuelle pour cet objet et exécuter la version de la classe dérivée de la fonction.
 
 

  • Les fonctions virtuelles garantissent que la fonction correcte est appelée pour un objet, quel que soit le type de référence (ou pointeur) utilisé pour l’appel de fonction.
  • Ils sont principalement utilisés pour réaliser le polymorphisme dynamique.
  • Les fonctions sont déclarées avec le mot clé virtual dans la classe de base.
  • La résolution de l’appel de fonction est effectuée au moment de l’exécution.
Exemple : Fonction virtuelle en C++
#include<iostream>

using namespace std; 

class A 
{ 
public: 
    virtual void print() { 
		cout << "print class A" << endl; 
	} 

    void display() { 
		cout << "display class A" << endl; 
	} 
}; 
  
class B : public A 
{ 
public: 
    void print () {
		cout << "print class B" << endl; 
	}

    void display () { 
		cout << "display class B" << endl; 
	} 
}; 
  
int main() 
{ 
    A *a; 
    B b; 
    a = &b; 

    // Fonction virtuelle, liée au moment de l'exécution
    a->print();  

    // Fonction non virtuelle, liée à la compilation
    a->display();  
}

La sortie :
 

 
Le polymorphisme au moment de l’exécution est obtenu uniquement via un pointeur (ou une référence) de classe de base. En outre, un pointeur de classe de base peut pointer sur les objets de la classe de base ainsi que sur les objets de la classe dérivée. Dans le code ci-dessus, le pointeur de classe de base « a » contient l’adresse de l’objet « b » de la classe dérivée.

Remarque : Si nous avons créé une fonction virtuelle dans la classe de base et qu’elle est redéfinie dans la classe dérivée, nous n’avons pas besoin du mot-clé virtual dans la classe dérivée, les fonctions sont automatiquement considérées comme des fonctions virtuelles dans la classe dérivée.
 
 

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.