摘要
C++ Object Model
一般來說有三種實作方式:
1.Simple: 一個Object內有一個 slot table, table 中各 slot 指向一個 member.
2.Table: 把 member 和 function 抽出來為 兩個 table, 物件內含一指標指向這兩個 table, 而 function
table 又指向各 function.
3.目前一般常見 C++ Compiler 所採用的物件模型, 則是將 member 放在物件中,物件內含一指標指向 function table,
而 static member 則另外存放於 heap 中.
繼承
早期,直接把 base class member 含括到 derived class, 較快; 但若 base class 變更,會造成 derived
class 需重新 compile.
2.0 規格以後,為有關聯的 virtual base class 加上指標:
- 導入 virtual base class table
- 擴充現有的 virtual table
簡單的說就是在衍生類別中加上指標指回 base class 的 member 和 function.
虛擬繼承
亦可指定 virtual, 如 iostream
class istream: virtual public ios {...}; class ostream:virtual public ios {...};
此情況下, base class 不管在繼承串列中被衍生幾次,均只存在一個實體,上例中, ios 將只存在一個.
class 和 struct
class 和 struct 幾乎相同,但仍然請依照需要乖乖使用.
多型
只有透過 pointer 或 reference 的間接處理,才支援多型.