Fonctions virtuelles pures privées en C
En C, rencontrer des fonctions virtuelles pures privées comme celles de la classe Engine peut être déroutant. Comme la question le suggère, les classes dérivées sont censées fournir des implémentations pour ces fonctions, mais comment peuvent-elles accéder aux membres privés de la classe de base pour ce faire ?
Cependant, la question repose sur une idée fausse : les classes dérivées peuvent en effet remplacer les fonctions virtuelles pures privées. Ils ne pourront peut-être pas les invoquer directement, mais ils peuvent fournir leurs propres implémentations. Cela permet de « séparer la spécification de l'interface de la spécification du comportement personnalisable de l'implémentation ». (Herb Sutter, "Virtuality")
Dans l'exemple donné, l'interface publique se compose de fonctions non virtuelles surchargées qui appellent des fonctions virtuelles non publiques et non surchargées. Ce modèle, connu sous le nom de « Public Overloaded Non-Virtuals Call Protected Non-Overloaded Virtuals », résout le problème du « masquage » des fonctions virtuelles dans les classes dérivées.
Considérez le cas hypothétique où SetStateBool et SetStateInt étaient de pures fonctions virtuelles. avec une interface non virtuelle dans la classe de base. Les classes dérivées devraient protéger les surcharges spécifiques contre le masquage par les nouvelles implémentations. Pour ce faire, ils devraient utiliser la déclaration using.
Cependant, en utilisant des fonctions virtuelles privées, les classes dérivées peuvent remplacer ces fonctions sans se soucier de cacher d'autres méthodes dans la classe de base. Cela simplifie le processus de personnalisation du comportement des fonctions virtuelles dans les classes dérivées.
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!