我一直認爲基類的公有方法確實被派生類繼承,甚至認爲派生類沒有定義該特定方法。例如如何調用未在派生類中定義的基類的函數?
#include <iostream>
using namespace std;
class A {
public:
int f() { cout << 3; return 0;}
int f(int x) {cout << x; return 0;}
};
class B: public A {
public:
int f() {std::cout << 5; return 0;}
};
int main(){
B ob;
ob.f(7);
return 0;
}
我期待的結果是:7,但我得到的編譯錯誤說
「錯誤:太多的參數函數調用,預期爲0,有1個;你的意思」 A :: f'「
我知道錯誤是想說什麼,但我有點困惑,基類的功能沒有被調用。
超載在派生類中的函數隱藏了所有的基類版本 –
使用虛擬關鍵字A – ZivS
我發現了一個從stackoverflow鏈接 - http://stackoverflow.com/questions/411103/function-with-same-n ame-but-different-signature-in-derived-class,它清楚地解釋了這個問題。 – pokche