class B : public virtual A
{
public:virtual void b();
};
class C : public A
{
public: virtual void c();
};
请问sizeof(B)和sizeof(C)各是多少?
...全文
30616打赏收藏
关于虚函数与虚继承
class A { public:virtual void a(); }; class B : public virtual A { public:virtual void b(); }; class C : public A { public: virtual void c(); }; 请问sizeof(B)和sizeof(C)各是多少?
虚拟函数的原理:
一个类的对象实例包含,成员变量和虚函数表指针vptr;
由此可知。
类a 包含一个虚函数表指针 4个字节
b 继承a 长度和a一样
同理c 继承b 和b长度一样
具体不知道a的大小,不过确定的是sizeof(b)==sizeof(c)
我的机子的试验结果为:
sizeof(A)==sizeof(b)==sizeof(c)==4
为了验证 :改写如下
class A
{
public:
int m_data1;
virtual a(){};
};
class B:public A
{
public:
virtual b(){};
};
class C:public B
{
public:
int m_data2;
virtual c(){};
};