Introduction au mot-clé virtuel en C ++

Un mot-clé virtuel en C ++ est utilisé pour créer une fonction virtuelle en C ++. La fonction virtuelle est la fonction de classe parent que nous voulons redéfinir dans la classe enfant. La fonction virtuelle est déclarée à l'aide du mot clé virtual. Lorsque nous définissons la fonction virtuelle, le mot clé virtual doit continuer dans la déclaration de la fonction. Le mot-clé virtuel indique au compilateur d'effectuer une liaison tardive ou une liaison dynamique sur la fonction.

Le pointeur unique est requis pour faire référence à tous les objets de classes différentes. Par conséquent, le pointeur est créé sur la superclasse pour référencer tous les objets de la classe dérivée, puis le pointeur de la superclasse contient l'adresse de l'objet de la classe dérivée exécutez toujours la fonction de superclasse. Donc, pour résoudre ce problème, nous utilisons la fonction virtuelle. Ainsi, lorsque la fonction virtuelle est créée dans la superclasse, le compilateur C ++ identifie la fonction à exécuter au moment de l'exécution et l'identification de la fonction prend en fonction du type d'objet pointé par le pointeur de la superclasse.

Fonction virtuelle

Les fonctions virtuelles de la syntaxe sont données ci-dessous:

Syntaxe

class name_class
(
public :
virtual return fun(arg1, arg2, ..)
(
//code inside the function
)
)

Comme dans la syntaxe, fun () déclare par le mot-clé virtuel, ce qui signifie que la classe enfant peut redéfinir les mêmes méthodes.

Programme 1:

#include
using namespace std;
class A
(
public:
void disp()
(
cout << " Message from the class A\n ";
)
);
class B :public A
(
public:
void disp()
(
cout << "Message from the class B\n";
)
);
int main()
(
A* obj1; // super class pointer
B obj2; // child class object
obj1 = &obj2;
obj1-> disp(); // Late Binding Occurs
)

Production:

Dans le programme ci-dessus, la superclasse A ayant la fonction disp (), qui est réécrite dans la classe dérivée B. Dans la fonction principale, la méthode disp () appelle l'objet obj1 (qui est une liaison dynamique ou une liaison tardive. Liaison dynamique est un processus dans lequel la fonction spécifique à exécuter est décidée au moment de l'exécution) et la fonction disp () de la classe A est exécutée.

Programme 2:

#include
using namespace std;
class A
(
public:
virtual void disp()
(
cout << " Message from the class A \n ";
)
);
class B :public A
(
public:
void disp()
(
cout << "Message from the class B\n";
)
);
int main()
(
A* obj1; // super class pointer
B obj2; // child class object
obj1 = &obj2;
obj1-> disp(); // Dynamic Binding Ocuurs
)

Production:

Le code de programme ci-dessus est l'altération du programme 1, la fonction disp () est définie avec le mot-clé virtual et maintenant lorsque l'obj1 appelle la fonction disp (), la fonction disp () de la classe enfant B est exécutée.

Programme 3:

#include
using namespace std;
class A
(
public:
virtual void disp()
(
cout << " Message from the class A\n ";
)
);
class B :public A
(
public:
virtual void disp()
(
cout << "Message from the class B\n";
)
);
int main()
(
A* obj1; // super class pointer
B obj2; // child class object
obj1 = &obj2;
obj1-> disp(); // Dynamic Binding Ocuurs
)

Production:

Le code de programme ci-dessus est l'altération du programme 2, la fonction disp () qui redéfinit également avec le mot-clé virtual dans la classe B et maintenant lorsque l'obj1 appelle la fonction disp (), la fonction disp () de la classe enfant B est exécuté.

Ensuite, nous écrivons le programme pour la fonction virtuelle pure. La fonction virtuelle pure est une fonction pour laquelle don n'avait pas d'implémentations. La fonction virtuelle pure est également appelée fonction virtuelle abstraite. La déclaration de fonction virtuelle pure attribue 0, comme indiqué dans le code ci-dessous -

Programme 4:

#include
using namespace std;
class A
(
public:
virtual void disp()=0;
);
class B :public A
(
public:
void disp()
(
cout << "Message from the class B\n";
)
);
int main()
(
A* obj1; // super class pointer
B obj2; // child class object
obj1 = &obj2;
obj1-> disp(); // Dynamic Binding Ocuurs
)

Production:

Avantages du mot-clé virtuel en C ++

  • Les fonctions virtuelles sont utilisées pour réaliser le polymorphisme d'exécution.
  • Si une classe est dérivée d'une classe ayant une fonction virtuelle, la définition de la fonction peut être redéfinie dans la classe dérivée.

Règles du mot-clé virtuel en C ++

  • Le mot-clé virtuel en C ++ utilise dans la déclaration de fonction.
  • Les fonctions virtuelles doivent être membres de la classe.
  • La fonction virtuelle accessible via des pointeurs d'objet.
  • La fonction virtuelle ne peut pas être déclarée comme statique.
  • La fonction virtuelle peut être des amis d'une autre classe.
  • Si la fonction virtuelle n'est pas utilisée dans la superclasse, nous pouvons également la définir dans la superclasse.
  • La signature d'une fonction virtuelle de la superclasse et des classes enfants doit être la même, dite de substitution de fonction, sinon si les deux fonctions avec le même nom mais une signature différente, elle est considérée comme les fonctions surchargées en C ++.
  • Nous pouvons avoir un destructeur virtuel mais pas un constructeur virtuel.

Conclusion

  • Un mot-clé virtuel en C ++ est utilisé pour créer une fonction virtuelle en C ++.
  • La fonction virtuelle est la fonction de classe parent que nous voulons redéfinir dans la classe enfant.
  • Le pointeur unique est requis pour faire référence à tous les objets de classes différentes.
  • Le pointeur de superclasse contient l'adresse de l'objet de la classe dérivée exécutez toujours la fonction de superclasse.
  • Les fonctions virtuelles doivent être membres de classe, doivent être membres de classe, ne peuvent pas être déclarées comme statiques, accessibles via des pointeurs d'objet.
  • La signature d'une fonction virtuelle de la superclasse et des classes enfants doit être la même, dite de substitution de fonction, sinon si les deux fonctions avec le même nom mais une signature différente, elle est considérée comme les fonctions surchargées en C ++.

Articles recommandés

Ceci est un guide du mot-clé virtuel en C ++. Ici, nous discutons de l'introduction et des avantages du mot-clé virtuel en C ++ avec sa syntaxe de la fonction virtuelle. Vous pouvez également consulter nos autres articles suggérés pour en savoir plus -

  1. Remplacement de méthode en C #
  2. Héritage en C #
  3. Commandes C #
  4. Commandes Java
  5. Surcharge en Java
  6. Polymorphisme en Java
  7. Les 11 principales fonctionnalités et avantages de C ++