ホームページ >バックエンド開発 >C++ >C 継承における関数名の衝突を解決するにはどうすればよいですか?

C 継承における関数名の衝突を解決するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-21 16:02:10941ブラウズ

How Can I Resolve Function Name Collision in C   Inheritance?

派生クラスでの関数の衝突

基底クラスとその派生クラスで同じ名前でシグネチャが異なる関数を定義する場合、名前検索の問題が発生する可能性があります。

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。