Maison > développement back-end > C++ > Les fonctions C peuvent-elles être à la fois statiques et virtuelles ?

Les fonctions C peuvent-elles être à la fois statiques et virtuelles ?

Barbara Streisand
Libérer: 2024-11-01 00:21:28
original
800 Les gens l'ont consulté

Can C   Functions Be Both Static and Virtual?

Les fonctions C peuvent-elles être à la fois statiques et virtuelles ?

Bien qu'il puisse sembler souhaitable d'avoir une fonction membre à la fois statique et virtuelle, C n'offre pas de moyen direct d'y parvenir. Bien que déclarer une fonction comme membre virtuel statique() entraînera une erreur de compilation, il existe des approches alternatives pour simuler le comportement souhaité :

Implémentation d'une fonction virtuelle non statique :

La solution la plus simple consiste à créer une fonction virtuelle non statique. Cela permet à la fonction d'être appelée à la fois sur les instances et les classes :

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

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

Fonction statique non virtuelle redondante :

Si vous appelez la version non-virtuelle d'une classe dérivée spécifique pratiquement sans qu'une instance d'objet soit nécessaire, une fonction statique non virtuelle redondante peut être fourni :

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

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

Approche fonction et constante :

Une autre option consiste à utiliser des fonctions et des constantes distinctes pour chaque classe :

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

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

Conclusion :

Bien que C ne prenne pas en charge nativement les membres virtuels statiques, les fonctions virtuelles non statiques ou les fonctions statiques redondantes offrent des alternatives viables pour obtenir des fonctionnalités similaires. Le choix de l'approche dépend des exigences spécifiques de l'application.

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