Maison > Article > développement back-end > 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 ?
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!