Maison > développement back-end > C++ > le corps du texte

Pourquoi un appel de fonction virtuelle hérite-t-il des arguments par défaut de la classe de base au lieu de la classe dérivée ?

Mary-Kate Olsen
Libérer: 2024-11-09 11:46:02
original
464 Les gens l'ont consulté

Why Does a Virtual Function Call Inherit Default Arguments from the Base Class Instead of the Derived Class?

Comportement des arguments par défaut des fonctions virtuelles

Dans le code C fourni, une situation curieuse se produit avec la surcharge des fonctions virtuelles et les arguments par défaut. Explorons le problème et comprenons le mécanisme sous-jacent.

Le code définit deux classes, B et D, où B a une méthode d'impression virtuelle avec un argument par défaut de 10 et D remplace l'impression avec un argument par défaut différent de 20. . Lors de l'appel de print via un pointeur de type B pointant vers un objet de type D, la sortie attendue de "D--data=20" n'est pas obtenue. Au lieu de cela, la sortie affiche "D--data=10".

Selon la norme C (8.3.6.10), un appel de fonction virtuelle utilise les arguments par défaut définis dans la déclaration déterminés par la valeur statique du pointeur ou de la référence. taper. Cela implique que lorsque print est appelé via un pointeur B, il hérite de l'argument par défaut de B, bien qu'il soit remplacé dans D.

L'explication réside dans le type statique (B) du pointeur, qui détermine l'argument par défaut. argument utilisé lors de l’appel de la fonction virtuelle. Même si l'objet pointé est de type D, le type du pointeur dicte le comportement de l'argument par défaut.

Par conséquent, pour obtenir la sortie souhaitée "D--data=20", le pointeur utilisé pour appeler print doit être de type D pour garantir l'utilisation de l'argument par défaut remplacé.

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