class X { public: void getX() { cout<<"getX"<<endl; } int i,j,k,m; }; class Y: virtual public X { public: void getY() { cout<<"getY"<<endl; } }; class Z:virtual public X { public: void getZ() { cout<<"getZ"<<endl; } }; class Box:public Y, public Z { public: void getBox() { cout<<"Box"<<endl; } }; int main() { Box b; b.getX(); cout<<sizeof(Z)<<endl; return 0; }
总结:
1、类的继承如果有B继承A,C继承A,D继承BC时,D中就要两份一样的A的类成员,通过virtual继承方式,可以D中就只会有一份A的类成员。
2、虚集成会消耗额外的内存空间,和虚函数表类似。
3、只有再多重继承中,virtual才有用,其他情况下使用,会降低效率并且多内存消耗。