多继承sizeof的求解

来源:互联网 发布:金融行业的网络推广 编辑:程序博客网 时间:2024/06/05 20:07

一:

#include "stdafx.h"#include <iostream>using namespace std;class A {int a;virtual ~A(){}};class B:public A{virtual void myfunB(){}};class C:public A{virtual void myfunC(){}};class D:public B,public C{virtual void myfunD(){}};int main( ){cout<<sizeof(A)<<endl;   //结果8cout<<sizeof(B)<<endl;   //结果8cout<<sizeof(C)<<endl;   //结果8cout<<sizeof(D)<<endl;   //结果16  return 0;}

内存分析图:


二:

#include "stdafx.h"#include <iostream>using namespace std;class A {int a;virtual ~A(){}};class B:public virtual A{virtual void myfunB(){}};class C:public virtual A{virtual void myfunC(){}};class D:public B,public C{virtual void myfunD(){}};int main( ){cout<<sizeof(A)<<endl;   //结果8cout<<sizeof(B)<<endl;   //结果16cout<<sizeof(C)<<endl;   //结果16cout<<sizeof(D)<<endl;   //结果24  return 0;}

内存分布图:


三:

#include "stdafx.h"#include <iostream>using namespace std;class A{    char i[3];public:    virtual void aa() {}};class B : virtual public A{    char j[3];public:    virtual void bb() {}};class C : public virtual A{    char k[3];public:    virtual void cc() {}};class D : public B, public C{    char l[3];public:    virtual void dd() {}};void main(){    cout << sizeof(A) << endl;    //8    cout << sizeof(B) << endl;    //20    cout << sizeof(C) << endl;    //20    cout << sizeof(D) << endl;    //36}
四:
#include "stdafx.h"#include <iostream>using namespace std;class A{    char i[3];public:    virtual void aa() {}};class B :  public A{    char j[3];public:    virtual void bb() {}};class C : public  A{    char k[3];public:    virtual void cc() {}};class D : public B, public C{    char l[3];public:    virtual void dd() {}};void main(){    cout << sizeof(A) << endl;    //8    cout << sizeof(B) << endl;    //12    cout << sizeof(C) << endl;    //12    cout << sizeof(D) << endl;    //28}



0 0
原创粉丝点击