Maison > développement back-end > C++ > Une classe dérivée peut-elle remplacer une fonction virtuelle avec un type de retour différent en C?

Une classe dérivée peut-elle remplacer une fonction virtuelle avec un type de retour différent en C?

Susan Sarandon
Libérer: 2024-12-11 08:35:11
original
713 Les gens l'ont consulté

Can a Derived Class Override a Virtual Function with a Different Return Type in C  ?

Type de retour de fonction virtuelle en C

Question :

Une classe héritée peut-elle implémenter un fonction virtuelle avec un type de retour différent sans utiliser de modèle comme retour ?

Réponse :

Dans certains cas, oui. Il est permis à une classe dérivée de remplacer une fonction virtuelle avec un type de retour différent, à condition que le type de retour soit covariant avec le type de retour d'origine. La covariance signifie que le type de retour de la fonction dérivée est un sous-type du type de retour de la fonction de base.

Considérons l'exemple suivant :

class Base {
public:
    virtual ~Base() {}

    virtual Base* clone() const = 0;
};

class Derived: public Base {
public:
    virtual Derived* clone() const {
        return new Derived(*this);
    }
};
Copier après la connexion

Dans cet exemple, la classe Base définit une fonction virtuelle pure nommée clone qui renvoie une Base*. La classe Derived remplace cette fonction virtuelle et renvoie un Derived*. Même si le type de retour est différent de la classe de base, cela est valide car Derived* est un sous-type de Base*.

En général, le type de retour d'une fonction n'est pas considéré comme faisant partie de sa signature. Tant que le type de retour est covariant, vous pouvez remplacer une fonction membre par n'importe quel type de retour.

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