深度探索C 物件模型 chapter 3

2021-09-17 04:48:48 字數 1688 閱讀 7440

class x{};

class y : public virtual x{};

class z : public virtual x{};

class a : public y, public z {};

/* linux 3.10 gcc 4.8.5  x86_64 不同平台是不同的*/

sizeof (x) : 1 byte

sizeof (y) : 8 byte

sizeof (z) : 8 byte

sizeof (a) : 16 byte

1. 對member function本體的分析,會直到整個class的宣告都出現了才開始

extern float x;  

class point3d

void x(float new_x) const

private:

float x, y, z;

};

2. 對member function的argument list的分析,是當即完成的。

typedef int length;

class point3d; // length is "int" not "float"

private:

typedef float length;

length _val;

};/*該這麼寫*/

typedef int length;

class point3d;

private:

length _val;

};

nonstatic data members在class object中的排列順序將和其被宣告的順序一樣

point3d origin, *pt = &origin; 

origin.x = 0.0;

pt->x = 0.0;

q : 從origin訪問"和"從pt訪問"有什麼重大的差異?當point3d是乙個derived class,而在其繼承結構中有乙個virtual base class,並且被訪問的member是乙個從該virtual base class繼承而來的member時,就會有重大的差異".這時不能夠說ptr必然指向哪一種

class type, 所以這個訪問操作必須延遲至執行期經由乙個額外的間接導引,才能夠解決.

但如果使用origin,就不會有這些問題,其型別無疑是point3d class

class concrete1 ;

class concrete2 : public concrete1 ;

class concrete3 : public concrete2 ;

作者扯淡呀, 在gcc上 concrete3 的大小為8b 沒有padding呀!!!!

深度探索C 物件模型

傳世經典書叢 深度探索c 物件模型 美 stanley b.lippman 斯坦利 b.李普曼 著 侯捷 譯 isbn978 7 121 14952 8 2012年1月出版 定價 69.00元 16開 356頁 宣傳語 如果你是一位c 程式設計師,渴望對於底層知識獲得乙個完整的了解,那麼本書正適合你...

深度探索C 物件模型

傳世經典書叢 深度探索c 物件模型 美 stanley b.lippman 斯坦利 b.李普曼 著 侯捷譯 isbn978 7 121 14952 8 2012年1月出版 定價 69.00元 16開 356頁 宣傳語 如果你是一位c 程式設計師,渴望對於底層知識獲得乙個完整的了解,那麼本書正適合你 ...

深度探索C 物件模型

深度探索c 物件模型 本書目錄結構如下 第1章 關於物件 object lessons 加上封裝後的布局成本 layout costs for adding encapsulation 1.1 c 模式模式 the c object model 簡單物件模型 a object model 驅動物件模...