虚函数类的子类对象是否包含虚表呢?
虚函数类的子类对象是否包含虚表呢?
一直不了解从虚函数类继承下来的类
是否也带着一个自己的自己父类一样的虚函数表指针
写了一个小程序测试一下
#include <iostream>
using namespace std;
class base
{
public:
base(){}
virtual void test()
{
cout<<"This is base"<<endl;
}
};
class derive : public base
{
public:
derive(){}
void test()
{
cout<<"This is derive"<<endl;
}
};
void main()
{
derive myderive;
base mybase = myderive;
mybase.test();
base mybase1;
derive myderive1;
cout<<"sizeof(mybase1)"<<sizeof(mybase1)<<endl;
cout<<"sizeof(myderive1)"<<sizeof(myderive1)<<endl;
}
编译器VC6,输入结果
This is base
sizeof(myderive)4
sizeof(mybase)4
Press any key to continue
得到两条矛盾的结论
a.如果子类对象不含有自己的虚函数表,那对于父类myderive,虚函数表作为对象里唯一的虚函数指针,指向的是一定是子类方法。
如此,为什么mybase作为直接阉割过的myderive对象应该指向父类虚方法?
b.如果子类也含有一个自己的虚拟函数表,那他们对象size确实一样的。
个人倾向于 子类对象不含有自己的虚函数表
可能是base mybase = myderive; 阉割过程中,编译器主动改了虚函数指针,指向了父类。
不知猜得对不对,求高手解释。谢谢。