//转自 http://www.rosoo.net/a/201307/16686.html

//关于sizeof(class)的学习
//问题1:空类            1byte
//问题2:虚类            成员变量+虚表  注意字节对齐
//问题3:单继承类        
//问题4:多继承类        各个继承类的空间之和 
//问题5:虚继承类        各个继承类的空间之和,再扩展出来的虚表


#include 
"stdafx.h"

#include 
<iostream>
#include 
<string>
using namespace std;

class Base
{
public:
    
int m_a;
    Base()
{}
    
~Base()    {}
    
void g2(int i = 10)    {}
private:
    
int m_b;
}
;
class Derived:public Base
{
public:
    Derived()    
{}
    
~Derived()    {}
    
virtual void g(int i=20){}////虚表4 bytes
}
;
class A
{
public:
    
double m_d;//8
    virtual void func1(){}//虚表4 bytes ,为了保存内存对齐,额外消耗4 bytes
}
;
class A1:public A{};//* 原封不动的继承
class A2:public A{};
class B :public A{};
class C :public virtual A1,public virtual A2{};//* 虚继承,
class D :public A1,public A2{};
class E{};//*空类1byte

int _tmain(int argc, _TCHAR* argv[])
{
    Base b;
    Derived d;
    Base 
*pb = new Derived;
    E e;

    
int n1     = sizeof(Base);//8
    int n2     = sizeof(b);   //8
    int n3     = sizeof(*pb); //8
    int n4     = sizeof(pb);//
    int n5  = sizeof(d);//12
    int n6  = sizeof(A);//16
    int n7  = sizeof(A1);//16
    int n8  = sizeof(A2);//16
    int n9  = sizeof(B);//16
    int n10 = sizeof(C);//40
    int n11 = sizeof(D);//32
    int n12 = sizeof(E);//1
    int n13 = sizeof(e);//1 空类占用的空间也最少(即1字节)
    return 0;
}