【发布时间】:2012-02-24 22:48:04
【问题描述】:
class base {
public:
void virtual fn(int i) {
cout << "base" << endl;
}
};
class der : public base{
public:
void fn(char i) {
cout << "der" << endl;
}
};
int main() {
base* p = new der;
char i = 5;
p->fn(i);
cout << sizeof(base);
return 0;
}
这里base类中定义的函数fn的签名与der类中定义的函数fn()的签名不同,尽管函数名称相同。
因此,der 类中定义的函数隐藏了base 类函数fn()。所以类der版本的fn不能被p->fn(i)调用;没事。
我的意思是,如果没有使用 VTABLE 指针,为什么 sizeof 类 base 或 der 是 4? VTABLE 指针这里有什么要求?
【问题讨论】:
-
你听说过 C++ 中的重载吗?
-
@KamilKlimek:重载是声明具有不同签名的多个函数的行为。您的意思可能是覆盖(即在派生类中重新实现方法)。
-
供您参考,这些不是重载函数。
-
这段代码实际上有隐藏问题:
der::fn(char)隐藏base::fn(int)。 -
@KamilKlimek:重载不是跨类,编译器正确解释,这在标准中有很好的定义。
标签: c++ overriding virtual-functions vptr