Maison > développement back-end > C++ > Les fonctions virtuelles pures en C peuvent-elles avoir des implémentations, et pourquoi feriez-vous cela ?

Les fonctions virtuelles pures en C peuvent-elles avoir des implémentations, et pourquoi feriez-vous cela ?

Mary-Kate Olsen
Libérer: 2024-12-18 04:11:09
original
716 Les gens l'ont consulté

Can Pure Virtual Functions in C   Have Implementations, and Why Would You Do That?

Fonctions virtuelles pures : implémentation et objectif

En C, les fonctions virtuelles pures sont généralement associées à la déclaration de l'interface d'une méthode sans fournir son implémentation. Cependant, il est possible d'avoir une fonction virtuelle pure avec une implémentation, comme illustré ci-dessous :

class A {
public:
    virtual void f() = 0;
};

void A::f() {
    cout << "Test" << endl;
}
Copier après la connexion

Bien que ce code soit syntaxiquement valide, son objectif et son utilisation nécessitent des explications supplémentaires.

Objectif de fournir une implémentation pour une fonction virtuelle pure :

Une classe de base peut définir une implémentation pour une fonction virtuelle pure, même si les classes dérivées sont tenus de fournir leurs propres implémentations. Le but de cette implémentation peut être :

  • Comportement par défaut : Fournir un comportement par défaut dont les classes dérivées peuvent hériter. Cependant, les classes dérivées doivent appeler explicitement A::f() pour utiliser ce comportement par défaut.
  • Fonctionnalité commune : Définissez un ensemble commun de fonctionnalités qui peuvent être réutilisées par toutes les classes dérivées. En fournissant une implémentation dans la classe de base, les classes dérivées peuvent éventuellement appeler cette fonctionnalité commune avec leurs propres personnalisations.

Comment invoquer l'implémentation de la classe de base :

Les classes dérivées peuvent invoquer l'implémentation de classe de base d'une fonction virtuelle pure en utilisant un nom complet :

class B : public A {

    virtual void f() {
        // class B doesn't have anything special to do for f()
        //  so we'll call A's

        // note that A's declaration of f() would have to be public 
        //  or protected to avoid a compile time problem

        A::f();
    }

};
Copier après la connexion

Utiliser Cas :

Considérons un scénario dans lequel il existe un comportement par défaut raisonnable pour une méthode. Cependant, le concepteur de classe souhaite que ce comportement par défaut soit invoqué uniquement explicitement. Fournir une implémentation pour une fonction virtuelle pure dans la classe de base permet aux classes dérivées d'accéder et d'utiliser ce comportement par défaut selon les besoins.

Remarque :

Bien qu'il soit techniquement possible de fournir une implémentation pour des fonctions virtuelles pures, c'est une pratique rare et peut prêter à confusion. Par conséquent, il est généralement recommandé d’éviter de le faire, sauf s’il existe une raison claire et justifiable.

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