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

Pourquoi l'argument par défaut d'une fonction virtuelle utilise-t-il la valeur de la classe de base ?

Mary-Kate Olsen
Libérer: 2024-11-12 16:57:01
original
424 Les gens l'ont consulté

Why Does the Default Argument of a Virtual Function Use the Base Class Value?

Comportement inattendu des arguments par défaut dans les fonctions virtuelles : comprendre la cause profonde

Dans cet extrait de code, vous rencontrez un problème intrigant lié à la valeur par défaut arguments des fonctions virtuelles. Bien que vous vous attendiez à ce que le résultat soit « D--data=20 », vous observez plutôt « D--data=10 ». Examinons le mécanisme interne pour comprendre la cause première.

Dans votre exemple, vous avez deux classes, B et D, avec une fonction virtuelle nommée print qui prend un argument par défaut. Dans la classe D, vous remplacez la fonction d'impression et fournissez un argument par défaut différent. Lorsque vous créez une instance de D, vous accédez à la fonction print via un pointeur vers B.

Selon le standard C (8.3.6.10), "Un appel de fonction virtuelle utilise les arguments par défaut dans la déclaration du fonction virtuelle déterminée par le type statique du pointeur ou de la référence désignant l'objet." Cela implique que lors de l'appel d'une fonction virtuelle via un pointeur vers une classe de base, elle utilise les arguments par défaut définis dans la déclaration de la classe de base, quels que soient les arguments par défaut remplacés dans la classe dérivée.

Par conséquent, lorsque vous appelez print via le pointeur bp, l'argument par défaut est déterminé par le type statique de bp, qui est B. Par conséquent, l'argument par défaut de B::print est utilisé, ce qui entraîne la sortie de "D--data=10" au lieu de l'attendu "D--données=20."

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