Maison > développement back-end > C++ > Comment se comportent les arguments par défaut dans les fonctions virtuelles en C ?

Comment se comportent les arguments par défaut dans les fonctions virtuelles en C ?

Barbara Streisand
Libérer: 2024-11-10 10:12:02
original
319 Les gens l'ont consulté

How do Default Arguments Behave in Virtual Functions in C  ?

Comportement de l'argument par défaut de la fonction virtuelle

En C, les fonctions virtuelles fournissent un mécanisme de polymorphisme. Cependant, le comportement des arguments par défaut dans les fonctions virtuelles peut prêter à confusion.

Considérez le code suivant :

class B {
public:
    B() {}
    virtual void print(int data = 10) {
        cout << endl << "B--data=" << data;
    }
};

class D : public B {
public:
    D() {}
    void print(int data = 20) {
        cout << endl << "D--data=" << data;
    }
};

int main() {
    B *bp = new D();
    bp->print();
    return 0;
}
Copier après la connexion

Lorsque vous exécutez ce code, vous pouvez vous attendre à ce que le résultat soit :

D--data=20
Copier après la connexion

Cependant, le résultat réel est :

D--data=10
Copier après la connexion

Explication :

La raison de ce comportement inattendu réside dans la norme C (8.3 .6.10), qui stipule qu'un appel de fonction virtuelle utilise les arguments par défaut dans la déclaration de la fonction virtuelle déterminés par le type statique du pointeur ou de la référence désignant l'objet. Dans ce cas, puisque vous appelez print() via un pointeur de type B (c'est-à-dire bp), l'argument par défaut de B::print() est utilisé, même si la fonction remplacée dans la classe dérivée D a une valeur par défaut différente. argument.

Par conséquent, lors de l'appel d'une fonction virtuelle via un pointeur ou une référence de classe de base, les arguments par défaut de la fonction de classe de base, et non la fonction remplacée, sont appliqués. Ce comportement est important à comprendre pour éviter toute confusion ou résultats inattendus lorsque vous travaillez avec des fonctions virtuelles et des arguments par défaut.

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