c++
支援了資料和方法的聯絡。 對
c++來說,他的布局成本就是 1.
none static data member 2.
a pointer to virtue table 3.
the pointer to virtue class
而成員函式,並不包括在
c++物件裡。還而言之,每乙個非
inline
成員函式只有乙個函式實體。而
inline
成員函式則在呼叫他的地方,產生乙個實體。
而對對於返回值為物件的函式,其實本質是返回值物件,是作為乙個引用輸出引數。 比如
: x foobar() >>> void foobar(x &result)
x foobar()
被c++轉換為
x foobar(x & _result)
對於多型,只有通過指標或者引用才能實現。直接運用物件不可實現 比如
: class a ;
class b : public a ;
b b;
a *pa = &b;
pa->foo();//
多型,呼叫
b::foo();
a &a = b;
a.foo();//
多型,呼叫
b::foo();
a a = b;
a.foo();//
直接用物件,被切割,呼叫
a::foo();
b *pb = &b; pb
和pa的指標值都一樣,並且都指向
b物件的第乙個
byte,
他們的區別覆蓋範圍( pa
,的範圍是b中的
a subobject
部分,而
pb指向的是整個
b物件範圍
)和內容解釋。
內容解釋在編譯時已決定,
1. 固定介面的呼叫,即
pa只能呼叫pa的
none static member
函式,而不能呼叫b的
none static member
函式。
2. 該介面的
access level,
通過virtue table,pa
呼叫的virtual
函式是他所指向物件
(b)的虛函式。
深度探索C 物件模型之C 物件模型筆記
0.菜鳥覺得,在看這本書的時候最好切換角色,把自己的思維轉換成編譯器開發者,去考慮問題,這樣會容易理解些.當然這樣很難,就想著自己要解決什麼樣的問題好了 1.在c 中,類的資料成員有兩種 靜態和非靜態 成員函式有三種 靜態,非靜態 虛函式。之所以這樣分,大概是因為在設計c 物件模型時,非靜態的資料成...
C 物件模型(一)
在c 中,有兩種類成員變數 static 和 nonstatic 三種類成員函式 static nonstatic 和 virtual 如 class point 簡單物件模型 圖1 簡單物件模型 在這個模型中,乙個object是一些列的slots,每乙個slot指向乙個成員,成員按其宣告次序,各被...
C 物件模型(一)
我們先定義乙個基類。class base virtual base void no static member function static void static member function virtual void virtual member function private int n...