Fonctions virtuelles pures dans une portée privée
Lorsque vous rencontrez du code avec des fonctions virtuelles pures et privées dans une classe de base, comme dans l'exemple fourni :
class Engine { public: void SetState( int var, bool val ); void SetState( int var, int val ); private: virtual void SetStateBool( int var, bool val ) = 0; virtual void SetStateInt ( int var, int val ) = 0; };
il peut sembler que les classes dérivées ne peuvent pas accéder à ces fonctions pour les implémenter. Cependant, les classes dérivées peuvent remplacer les fonctions virtuelles privées, fournissant ainsi leurs propres implémentations. Cela ne doit pas être confondu avec l'incapacité des méthodes de classe dérivées à appeler des fonctions virtuelles à partir de la classe de base.
Séparation de l'interface et de l'implémentation
Les fonctions virtuelles privées permettent la séparation entre la spécification de l'interface et l'implémentation qui peut être personnalisée dans les classes dérivées. L'interface publique consiste en un ensemble de fonctions non virtuelles surchargées qui appellent des fonctions virtuelles privées non surchargées. Cet idiome, connu sous le nom de « Public Overloaded Non-Virtuals Call Protected Non-Overloaded Virtuals », permet de gérer la règle de masquage.
Empêcher le masquage
Dans un scénario où le L'interface publique n'est pas virtuelle et l'implémentation virtuelle est privée, l'auteur de la classe dérivée peut simplement fournir sa propre implémentation des fonctions virtuelles sans se soucier de masquer les membres de la classe de base. Par exemple :
class MyTurbochargedV8 : public Engine { private: void SetStateInt(int var, int val ) {/* new implementation */} };
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!