Fonctions virtuelles pures : implémentation et objectif
En C, les fonctions virtuelles pures sont généralement associées à la déclaration de l'interface d'une méthode sans fournir son implémentation. Cependant, il est possible d'avoir une fonction virtuelle pure avec une implémentation, comme illustré ci-dessous :
class A { public: virtual void f() = 0; }; void A::f() { cout << "Test" << endl; }
Bien que ce code soit syntaxiquement valide, son objectif et son utilisation nécessitent des explications supplémentaires.
Objectif de fournir une implémentation pour une fonction virtuelle pure :
Une classe de base peut définir une implémentation pour une fonction virtuelle pure, même si les classes dérivées sont tenus de fournir leurs propres implémentations. Le but de cette implémentation peut être :
Comment invoquer l'implémentation de la classe de base :
Les classes dérivées peuvent invoquer l'implémentation de classe de base d'une fonction virtuelle pure en utilisant un nom complet :
class B : public A { virtual void f() { // class B doesn't have anything special to do for f() // so we'll call A's // note that A's declaration of f() would have to be public // or protected to avoid a compile time problem A::f(); } };
Utiliser Cas :
Considérons un scénario dans lequel il existe un comportement par défaut raisonnable pour une méthode. Cependant, le concepteur de classe souhaite que ce comportement par défaut soit invoqué uniquement explicitement. Fournir une implémentation pour une fonction virtuelle pure dans la classe de base permet aux classes dérivées d'accéder et d'utiliser ce comportement par défaut selon les besoins.
Remarque :
Bien qu'il soit techniquement possible de fournir une implémentation pour des fonctions virtuelles pures, c'est une pratique rare et peut prêter à confusion. Par conséquent, il est généralement recommandé d’éviter de le faire, sauf s’il existe une raison claire et justifiable.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!