Maison > développement back-end > C++ > Les membres C peuvent-ils être à la fois statiques et virtuels ?

Les membres C peuvent-ils être à la fois statiques et virtuels ?

DDD
Libérer: 2024-10-30 19:09:30
original
505 Les gens l'ont consulté

Can C   Members Be Both Static and Virtual?

Les membres C peuvent-ils être à la fois statiques et virtuels ?

En C, les membres ne peuvent pas être déclarés à la fois statiques et virtuels. Compiler une déclaration comme static virtual member(); entraînera une erreur.

Cependant, vous pouvez obtenir un effet similaire en utilisant les méthodes suivantes :

  • Fonctions séparées : Définissez une fonction statique et une fonction non -fonction virtuelle statique du même nom. La fonction non virtuelle peut être appelée directement sur la classe ou remplacée dans les classes dérivées, tandis que la fonction statique donne accès à l'implémentation de la classe de base.
  • Fonctions surchargées : Déclarez les fonctions surchargées avec le même nom (un virtuel statique et un virtuel non statique). Le compilateur sélectionnera la fonction appropriée en fonction du contexte d'appel.

Voici un exemple :

<code class="cpp">struct Object
{
    static const TypeInformation& GetTypeInformation();
    virtual const TypeInformation& GetTypeInformation() const;
};

struct SomeObject : public Object
{
    static const TypeInformation& GetTypeInformation();
    virtual const TypeInformation& GetTypeInformation() const override;
};</code>
Copier après la connexion

Cela vous permet d'appeler GetTypeInformation() à la fois sur des objets (object-> ;GetTypeInformation()) et sur les classes (SomeObject::GetTypeInformation()). Object::GetTypeInformation() renverra l'implémentation de la classe de base, tandis que SomeObject::GetTypeInformation() appellera la version remplacée.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal