C 物件模型筆記 一 C 物件

2021-05-24 01:31:45 字數 1200 閱讀 3968

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...