Maison > développement back-end > C++ > le corps du texte

Comment les classes dérivées peuvent-elles implémenter des fonctions virtuelles pures privées dans une classe de base ?

Mary-Kate Olsen
Libérer: 2024-11-04 06:45:02
original
151 Les gens l'ont consulté

How Can Derived Classes Implement Private Pure Virtual Functions in a Base Class?

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;    
};
Copier après la connexion

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 */}
};
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!