Maison  >  Article  >  développement back-end  >  Les classes dérivées héritent-elles des paramètres par défaut dans les fonctions virtuelles ?

Les classes dérivées héritent-elles des paramètres par défaut dans les fonctions virtuelles ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-23 09:58:09258parcourir

Do Derived Classes Inherit Default Parameters in Virtual Functions?

Fonctions virtuelles avec paramètres par défaut

Les fonctions virtuelles sont couramment utilisées dans la programmation orientée objet pour le polymorphisme. Ils peuvent avoir des valeurs de paramètres par défaut, et la question se pose de savoir si les classes dérivées héritent de ces valeurs par défaut ou spécifient les leurs.

Les classes dérivées héritent-elles des valeurs par défaut ?

Selon le C Standard, les classes dérivées n'héritent pas des valeurs par défaut des fonctions virtuelles de la classe de base.

Quelle valeur par défaut est Utilisé ?

La valeur par défaut utilisée dans un appel de fonction virtuelle dépend du type statique de l'objet appelé. Si vous appelez une fonction virtuelle via un objet ou une référence de classe de base, la valeur par défaut de la classe de base sera utilisée. Cependant, si vous appelez via un objet ou une référence de classe dérivée, la valeur par défaut de la classe dérivée sera utilisée.

Comportement du compilateur et pratiques recommandées

Différents compilateurs peuvent gérer les valeurs par défaut des fonctions virtuelles différemment. Cependant, la norme C stipule que les valeurs par défaut ne sont pas héritées et doivent être spécifiées explicitement dans les classes dérivées.

Exemple

Considérons l'exemple suivant :

struct Base {
  virtual void f(int a = 7);
};
struct Derived : public Base {
  void f(int a);
};

Dans cet exemple, la fonction f de la classe Derived n'hérite pas de la valeur par défaut de 7 de la classe de base. Lors de l'appel de f via un objet de classe Derived, l'appel doit spécifier explicitement l'argument, comme indiqué ci-dessous :

Derived d;
d.f(10); // Call `Derived::f(int a)` with a = 10

Conclusion

Alors que les fonctions virtuelles peuvent avoir des paramètres par défaut , ces valeurs par défaut ne sont pas héritées par les classes dérivées. La valeur par défaut utilisée dépend du type statique de l'objet appelé. Suivre les recommandations du standard C et spécifier explicitement les valeurs par défaut dans les classes dérivées est considéré comme une bonne pratique.

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!

Déclaration:
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