Maison > développement back-end > C++ > Pourquoi dois-je utiliser `b->A::DoSomething()` au lieu de `b->DoSomething()` lors de l'appel d'une méthode depuis une classe parent en C ?

Pourquoi dois-je utiliser `b->A::DoSomething()` au lieu de `b->DoSomething()` lors de l'appel d'une méthode depuis une classe parent en C ?

DDD
Libérer: 2024-11-03 08:30:29
original
689 Les gens l'ont consulté

Why do I need to use `b->A::DoSomething()` au lieu de `b->DoSomething()` lors de l'appel d'une méthode depuis une classe parent en C ? 
A::DoSomething()` au lieu de `b->DoSomething()` lors de l'appel d'une méthode depuis une classe parent en C ? " />

Résolution de surcharge C pour les conflits de portée

L'extrait de code fourni illustre un défi courant dans la résolution de surcharge C lorsque deux méthodes portant le même nom existent dans des portées différentes . Dans ce scénario, le compilateur s'appuie sur les règles de visibilité de la portée pour déterminer la méthode applicable.

Problème :

Lors de l'appel de la méthode DoSomething sur une instance de classe B. , pourquoi est-il nécessaire d'utiliser explicitement b->A::DoSomething() au lieu de simplement b->DoSomething() ?

Réponse :

Le Le compilateur considère par défaut la plus petite portée de nom possible et, dans ce cas, il ne reconnaît que la méthode DoSomething définie dans la classe B. Étant donné que la liste d'arguments ne correspond pas à la signature de cette méthode, le compilateur génère une erreur.

Pour pour résoudre ce problème de portée, il existe deux approches :

Résolution explicite de la portée :

Spécifiez explicitement la portée de la méthode souhaitée à l'aide de la syntaxe b->A : DoSomething(), qui force le compilateur à reconnaître la méthode définie dans la classe A.

Héritage de la portée :

Utilisez la directive using pour amener la méthode souhaitée dans la portée de la classe dérivée. Par exemple :

<code class="cpp">class B : public A {
public:
    using A::DoSomething;
    // ...
}</code>
Copier après la connexion

En utilisant l'une de ces méthodes, vous pouvez vous assurer que le compilateur résout correctement la surcharge et appelle la méthode DoSomething prévue.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal