
//轉自 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;
}




Base()
