我一直认为基类的公有方法确实被派生类继承,甚至认为派生类没有定义该特定方法。例如如何调用未在派生类中定义的基类的函数?
#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