Maison > Article > développement back-end > Pourquoi le compilateur nécessite-t-il `b->A::DoSomething()` au lieu de `b->DoSomething()` dans ce code C ?
A::DoSomething()` Au lieu de `b->DoSomething()` dans ce code C ? " />
Résolution de surcharge C
Dans l'exemple de code donné, le compilateur nécessite l'utilisation explicite de b->A::DoSomething() au lieu de b ->DoSomething() en raison du concept de "résolution de surcharge".
La résolution de surcharge détermine quelle fonction de surcharge est appelée en fonction du type et du nombre d'arguments. Dans ce cas, le compilateur considère la méthode DoSomething(. ) dans le cadre de la classe B en premier. Puisqu'il existe une méthode avec le même nom et les mêmes paramètres dans B, le compilateur tente de résoudre la surcharge dans B.
Cependant, la méthode DoSomething() dans A est. également une surcharge valide. Pour accéder explicitement à cette surcharge, l'opérateur scope :: est utilisé pour spécifier que la méthode DoSomething() appartient à la classe de base A.
Une solution possible pour éviter ce problème serait de " déroulez" la surcharge de A dans la portée de B à l'aide du mot-clé using. Cela permet effectivement d'accéder à A::DoSomething() directement dans B. Voici un exemple :
<code class="cpp">class B : public A { public: using A::DoSomething; // Additional methods or members };</code>
Maintenant, dans la portée de B, la méthode DoSomething() peut être appelée sans le préfixe A::, car elle est considérée comme une surcharge au sein de B en raison de la directive using.
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!