一:
#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; //结果8
cout<<sizeof(B)<<endl; //结果8
cout<<sizeof(C)<<endl; //结果8
cout<<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; //结果8
cout<<sizeof(B)<<endl; //结果16
cout<<sizeof(C)<<endl; //结果16
cout<<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
}