class A{};class B{ char ch; virtual void func0() { }};class C{ char ch1; char ch2; virtual void func() { } virtual void func1() { }};class D : public A, public C{ int d; virtual void func() { } virtual void func1() { }};class E : public B, public C{public: int e; virtual void func0() { } virtual void func1() { } //子类里(E)没有实现func(),所以在E的子类里B的vfptr指向C的func()和E的func1() virtual void func123() { }}int main(){ //result=1,空类,大小为1 cout << "A=" << sizeof(A) << endl; //result=8,4(vfptr,4)+4(char ch,内存对齐,4) = 8 cout << "B=" << sizeof(B) << endl; //result=8 , 4(vfptr,4)+4(char ch1,char ch2,内存对齐,4) = 8 cout << "C=" << sizeof(C) << endl; //result=12, 4(类D的vfptr,4)+4(存在基类的char ch1,char ch2,内存对齐,4)+4(int d) = 12 D obj_d; //首先VPTR指向的虚函数表中保存的是类D中的两个虚函数的地址 cout << "D=" << sizeof(obj_d) << endl; //result=20,(多继承)继承多少个有虚函数的类,就有多少个虚函数指针,也即这几个虚函数指针组成了自己的vfptr(编译器不再单独给自己的虚函数插vfptr) //4(B的vfptr)+4(char ch)+4(C的vfptr)+4(C中 char ch1,char ch2)+4(E 中int d) = 20 //这个可以从调试下看出来 E obj_e; obj_e.e = 123; cout << "E=" << sizeof(obj_e) << endl; return 0;}