衍生類別中的函數衝突
在基底類別及其衍生類別中定義具有相同名稱但不同簽署的函數時,可能會出現名稱查找問題。
請考慮以下事項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中文網其他相關文章!