首頁 > 後端開發 > C++ > 如何解決 C 繼承中的函數名稱衝突?

如何解決 C 繼承中的函數名稱衝突?

Patricia Arquette
發布: 2024-12-21 16:02:10
原創
938 人瀏覽過

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)中的函數,並忽略 A 中的重寫函數。

要解決此問題,衍生類別B 必須明確聲明重寫的函數使用using 指令的函數:

class B : public A
{
public:
    int foo(int i){};
    using A::foo;
};
登入後複製

透過使用using 指令,B 有效地將A 中的foo () 函數重新引入到自己的作用域中,使其對C 等後續衍生類別可見。

以上是如何解決 C 繼承中的函數名稱衝突?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板