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); } };
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!