この C コードでは `b->DoSomething()` の代わりに
C オーバーロードの解決
指定されたコード例では、コンパイラーは b の代わりに b->A::DoSomething() を明示的に使用する必要があります。 ->DoSomething() 「オーバーロード解決」の概念による。
オーバーロード解決は、引数の型と数に基づいてどの関数オーバーロードが呼び出されるかを決定します。この場合、コンパイラーはメソッド DoSomething() を考慮します。 ) まず、クラス B のスコープ内に同じ名前とパラメーターを持つメソッドが存在するため、コンパイラーは B 内のオーバーロードを解決しようとします。
ただし、A 内のメソッド DoSomething() はこれも有効なオーバーロードです。このオーバーロードに明示的にアクセスするには、スコープ演算子 :: を使用して、DoSomething() メソッドが基本クラス A に属することを指定します。
この問題を回避するための 1 つの解決策は、次のとおりです。 using キーワードを使用して、A から B のスコープにオーバーロードをプルダウンします。これにより、B 内で直接 A::DoSomething() にアクセスできるようになります。例を次に示します。
<code class="cpp">class B : public A { public: using A::DoSomething; // Additional methods or members };</code>
今度は、スコープ内でB のメソッド DoSomething() は、using ディレクティブにより B 内のオーバーロードと見なされるため、A:: プレフィックスなしで呼び出すことができます。
以上がこの C コードでコンパイラが `b->DoSomething()` ではなく `b->A::DoSomething()` を必要とするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。