C 建構函式語義學 三 基於C 物件模型

2022-06-18 14:48:18 字數 788 閱讀 5647

28分析:如果不引入虛基類,那麼在呼叫的時候,會發生呼叫衝突,編譯器不知道該呼叫那個資料成員。

有了虛基類後,假設我們沒有定義自己的建構函式,那麼編譯器會為其合成乙個出來,生成乙個指向虛基類表的指標。

關於虛基類的布局,以後再深入**。

總結:四種情況,編譯器會在需要的時候自己合成乙個預設的建構函式出來:

1.帶有預設建構函式的類成員

2.帶有預設建構函式的基類

3.帶有虛函式的類

4.帶有虛基類的類

錯誤思想:

1.任何乙個類如果自己沒有定義預設的建構函式,那麼編譯器都會合成乙個出來。

2.編譯器合成出來的預設建構函式會顯式的對類中的資料成員進行的值的設定。

強調:只有在需要的時候編譯器才會為類合成乙個預設的建構函式,且合成所作的工作都是編譯器認為需要做的,對於不需要的,即使合成了,那一部分工作編譯器也不會為其分擔絲毫!!!

C 函式語義學

我們或許會認為呼叫類成員函式的開銷會大於呼叫普通函式,但是其實不是這樣的,呼叫普通成員函式和全域性函式開銷差不多,我們可以在vs中除錯,檢視反彙編 普通成員函式在呼叫的時候編譯器會在傳遞乙個物件的this指標 eg includeusing namespace std class a void te...

建構函式語義學

有些書上說,如果乙個類中沒有任何的建構函式,那麼編譯器會為我們預設的合成乙個 合成預設規則函式 其實,系統是在 必要的時候 才會為我們合成預設的建構函式。這個可以去分析obj檔案 情況1 如果乙個類中沒有任何的建構函式,且它的成員變數中含有乙個類型別的成員,那麼這個時候系統會為這個類合成乙個預設的建...

C 虛函式語義學

c 中的多型通過虛函式表實現,需要在執行時,根據指標所指物件的實際型別,根據物件中的虛函式表指標來索引相應的虛函式來呼叫。對於class derived public base1,public base2 base2 pbase2 new derived pbase2會調整this指標,使pbase...