首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

请问虚拟继承算类的大小

2012-03-31 
请教虚拟继承算类的大小C/C++ code#includeiostream#includememory.husing namespace stdclass baseC

请教虚拟继承算类的大小

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)

记住当虚继承时,父类跟子类的虚函数表是分开的,当不是虚继承的时候,父类跟子类的虚函数表是在一块的

热点排行