class A
{
virtual aa(){};
};
class B :public A
{
char j[3];
virtual bb(){};
};
class C : public B
{
char i[3];
public:
virtual cc(){};
};
用sizeof算的话结果分别是4,8,12。C的大小为什么是12啊?感觉应该是16才对。
pVtbl 4
j[3] 4
i[3] 4
所以是12,成员中最大的size按4对齐也是4,而虚函数表的指针只有一个。
你可以看一下各成员的偏移量就明白了
vptr, 不是pvtbl, 是指向虚函数表,而不是虚函数表.
class B的虚函数对C没有作用吗?假如定义一个类class BB和B是同一个定义,class C对两个同时继承时,sizeof却成了20。这怎么解释?按照上面的推理应该是12+4=16啊
vptr不就是vtbl的指针吗。我说的是虚函数表的指针,而不是虚函数表。
sizeof求什么大小阿?俺是菜鸟,有人给讲解一下没。。。。