関数シャドウイングの不満: 異なるシグネチャを持つ欠落関数の検索
オブジェクト指向プログラミングでは、基本クラスと派生クラスの間で名前の競合が発生する可能性があります。同じ名前で異なるシグネチャを持つ関数が存在する場合。これにより、コード実行中に混乱が生じたり、予期しない動作が発生したりする可能性があります。このようなシナリオは次のコードで発生しました:
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); } };
このコードをコンパイルしようとすると、foo の呼び出し時に関数 C::foo(std::string&) が見つからないためにエラーが発生します。 (s) bar メソッド内。基本クラス A に foo(string s) が存在するにもかかわらず、クラス B で継承された foo(int i) は基本クラス関数をシャドウします。
この問題を解決し、目的の関数にアクセスできるようにするには、関数基本クラスからの宣言は、派生クラスのスコープ内で明示的に再宣言する必要があります。これにより、両方の関数が派生クラスとその子孫内から確実に見えるようになります。
class A { public: void foo(string s); }; class B : public A { public: int foo(int i); using A::foo; }; class C : public B { public: void bar() { string s; foo(s); } };
クラス スコープでの名前検索では、現在のクラス内からの宣言が優先され、基底クラスのサブクラスからの非表示の宣言が排除されることに注意することが重要です。 -オブジェクト。したがって、同じ名前で異なるシグネチャを持つ関数を派生クラスに導入すると、基本クラスの関数がわかりにくくなり、前述のエラーが発生する可能性があります。
以上がC 継承における関数シャドウイングの問題を解決するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。