请教虚拟继承算类的大小
- C/C++ code
#include<iostream>#include<memory.h>using namespace std;class baseClass{ public: int nvalue1; char c; baseClass() { nvalue1=0; cout<< "create baseclass"<<endl; }; virtual ~baseClass() { cout<<"destroy baseclass"<<endl; }; virtual void fool(void){}; void getValue(void) { cout<<"nvalue1="<<nvalue1<<endl; };};class midClass1 :virtual public baseClass{ public: int nMidValue1; midClass1() { cout<<"create midClass1"<<endl; }; virtual ~midClass1() { cout<<"destory midClass1"<<endl; }; int getValue(void) {}; virtual void setValue(void) { nvalue1=10; };};class midClass2 :virtual public baseClass{ public: int nMidValue2; midClass2() { cout<<"create midClass1"<<endl; }; virtual ~midClass2() { cout<<"destory midClass2"<<endl; }; int getValue(void) {}; virtual void setValue(void) { nvalue1=20; };};class deriverClass : public midClass1,public midClass2{ public : int nSubValue; deriverClass() { cout<<"create deriverClass"<<endl; }; ~deriverClass() { cout<<"destroy deriverClass"<<endl; }; virtual void foo2(void){};};int main(){ //deriverClass aSimple; cout<<"sizeof(baseClass)="<<sizeof(baseClass)<<endl; cout<<"sizeof(midClass1)="<<sizeof(midClass1)<<endl; cout<<"sizeof(midClass2)="<<sizeof(midClass2)<<endl; cout<<"sizeof(deriverClass)="<<sizeof(deriverClass)<<endl; return 0;}
主要说说如何计算大小的哈!
[解决办法]
上面说反了
这个好计算:sizeof(baseClass)=sizeof(nvalue1)+sizeof(char)+虚指针 =12,这里考虑字节对齐问题,sizeof(char)应该为4
sizeof(midClass1)=sizeof(nSubValue)+虚继承指针+midClass1中的虚函数指针+sizeof(baseClass)
记住当虚继承时,父类跟子类的虚函数表是分开的,当不是虚继承的时候,父类跟子类的虚函数表是在一块的