Fonction virtuelle pure en C++
Parfois, l’implémentation de toutes les fonctions ne peut pas être fournie dans une classe de base car nous ne connaissons pas l’implémentation. Par exemple, supposons que la classe « Animale » soit une classe de base. Nous ne pouvons pas fournir l’implémentation de la fonction move() dans la classe « Animale », (en supposant que tous les animaux bougent), mais tous les animaux doivent savoir comment se déplacer. Nous ne pouvons pas créer des objets de classes abstraites.
Une fonction virtuelle est une fonction membre de la classe de base que vous comptez redéfinir dans des classes dérivées.
Une fonction virtuelle pure (ou fonction abstraite) en C++ est une fonction virtuelle pour laquelle nous n’avons pas d’implémentation, nous avons juste la déclaration. Une fonction virtuelle pure est déclarée en affectant 0 à la déclaration.
Exemple : Fonction virtuelle pure en C++
// Classe abstraite class MaClasse { public: // Fonction virtuelle pure virtual void myFunction() = 0; };
Exemple complet:
#include<iostream> using namespace std; class Message { public: virtual void say() = 0; }; //Cette classe hérite de la classe Message et implémente la fonction say() class Welcome : public Message { public: void say() { cout << "Hi, Welcome to WayToLearnX!"; } }; int main() { Welcome w; w.say(); return 0; }
La sortie :
Vous dites « Une fonction virtuelle pure (ou fonction abstraite) en C++ est une fonction virtuelle pour laquelle nous n’avons pas d’implémentation, nous avons juste la déclaration ».
Or, il peut y avoir une implémentation dans une méthode virtuelle pure. Cette implémentation peut être un traitement commun que des classes dérivées pourront appeler.
Exemple :
Supposons que nous écrivions une librairie sur les B-Arbres. Nous souhaitons traiter la problématique des clés dupliquées. Nous aurons une hiérarchie de clés. Une méthode virtuelle (pure dans la classe de base) nous dira la relation entre 2 clés C1 et C2 : C1C2.
Pour les clés dupliquées (donc C1==C2) la différentiation se fera sur la position de l’objet pointé par la clé dans le flux de données. Cette différentiation sera réalisée dans la méthode virtuelle pure abstraite de la classe de base. Cette méthode de la classe de base sera appelée par les méthodes des classes dérivées en cas d’égalité.