use*_*379 8 c++ overriding virtual-functions vptr
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;
}
Run Code Online (Sandbox Code Playgroud)
这里定义的函数fn的签名与base类中fn()定义的函数的签名不同,der虽然函数名称相同.因此,der类中定义的base函数隐藏了类函数fn().所以der fn的类版本不能通过调用来p->fn(i)调用; 没事.
我的观点是,为什么sizeof类base或者der是4如果没有用的VTABLE的指针?这里有VTABLE指针的要求是什么?
请注意,这是高度依赖于实现的,并且可能因每个编译器而异.
存在的要求vtable是Base类用于继承和扩展,并且从它派生的类可能会覆盖该方法.
Base和Derived这两个类可能驻留在不同的Translation Unit中,编译Base类时编译器也不会真正知道该方法是否会被覆盖.所以,如果找到virtual它生成的关键字vtable.