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 驅動物件模...