派生クラスでの関数の衝突
基底クラスとその派生クラスで同じ名前でシグネチャが異なる関数を定義する場合、名前検索の問題が発生する可能性があります。
次の点を考慮してください。 code:
class A { public: void foo(string s){}; }; class B : public A { public: int foo(int i){}; }; class C : public B { public: void bar() { string s; foo(s); } };
この例では、クラス C の bar() 関数内の基本クラス A から foo() 関数にアクセスしようとすると、コンパイラはエラーを発生させます。これは、名前検索が検索を優先するためです。
この問題を解決するには、派生クラス B が明示的に宣言する必要があります。 using ディレクティブを使用してオーバーライドされた関数:
class B : public A { public: int foo(int i){}; using A::foo; };
using ディレクティブを使用することで、B は効果的に foo() 関数を A から独自のスコープに再導入し、C などの後続の派生クラスから見えるようにします。
以上がC 継承における関数名の衝突を解決するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。