ホームページ > バックエンド開発 > C++ > C 継承における関数シャドウイングの問題を解決するにはどうすればよいですか?

C 継承における関数シャドウイングの問題を解決するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-12-22 10:33:45
オリジナル
232 人が閲覧しました

How Can I Resolve Function Shadowing Issues in C   Inheritance?

関数シャドウイングの不満: 異なるシグネチャを持つ欠落関数の検索

オブジェクト指向プログラミングでは、基本クラスと派生クラスの間で名前の競合が発生する可能性があります。同じ名前で異なるシグネチャを持つ関数が存在する場合。これにより、コード実行中に混乱が生じたり、予期しない動作が発生したりする可能性があります。このようなシナリオは次のコードで発生しました:

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート