Différence entre une fonction virtuelle et une fonction virtuelle pure
Ffonction virtuelle et fonction virtuelle pure, les deux sont des concepts du polymorphisme d’exécution. Le polymorphisme est supporté par les langages C++ et Java. En Java, le terme Redéfinition est utilisé à la place des fonctions virtuelles, car une fonction virtuelle n’est utilisé que dans la programmation C++. La principale différence entre fonction virtuelle et fonction virtuelle pure est que la fonction virtuelle a sa définition dans la classe mère et que les classes filles qui l’héritent la redéfinissent. Une fonction virtuelle pure n’a pas de définition dans la classe mère et toutes les classes filles doivent la redéfinir.
Définition de fonction virtuelle
Une fonction virtuelle est une fonction membre de la classe mère et elle est redéfinie par les classes filles qui héritent de la classe mère. Il n’est pas nécessaire que toutes les classes filles doivent redéfinir la fonction virtuelle, elle n’est redéfinie que par les classes filles qui peuvent nécessiter son fonctionnement. Une fonction virtuelle est créée en déclarant la fonction dans la classe mère précédée du mot-clé virtual.
Exemple:
class Test{ virtual int start(); };
Définition de fonction virtuelle pure
Une fonction virtuelle pure fournit les mêmes fonctionnalités qu’une fonction virtuelle. En dehors de cela, une fonction virtuelle pure fait de la classe une classe abstraite. Cela signifie que si une classe possède une fonction virtuelle pure, la classe ne peut pas être instanciée. Seules les références ou les pointeurs peuvent être créés de cette classe.
Une fonction virtuelle pure dans une classe mère oblige les classes filles de définir la fonction virtuelle pure. Sinon, la classe fille sera également une classe abstraite.
Exemple:
class Test { virtual int start() = 0; };
Différences entre une fonction virtuelle et une fonction virtuelle pure
- Les fonctions virtuelles sont définitivement définies dans la classe mère et redéfinies (substitut) dans la classe fille.
- La classe mère qui contient une fonction virtuelle peut être instanciée, c’est-à-dire que son objet peut être créé mais une classe mère contenant une fonction virtuelle pure, ne peut être instanciée, car c’est une classe abstraite qui n’est pas entièrement définie.
- Si la classe fille ne redéfinit pas la fonction virtuelle, elle peut utiliser la fonction virtuelle de la classe mère. En revanche, si la classe fille ne parvient pas à remplacer la fonction virtuelle pure, une erreur de compilation se produit.
- Toutes les classes filles n’ont pas besoin de redéfinir une fonction virtuelle alors que, dans le cas d’une fonction virtuelle pure, la classe doit redéfinir définitivement une fonction virtuelle pure.