讀者史列因建議:第一章是總覽,全看懂後面就沒必要看了。內容後面都有詳細介紹,開始只要有大概印象即可。書中許多內容前後重複。建議先不管看懂沒,只管往後看,之後再從頭看幾遍,效果好得多。這是閱讀技術書的好方法:遇不懂放下、打打紅警(自稱高手)或跳過,繼續研究。
書上範例(註標為 slot 索引):
class Point {
public:
Point(float xval); // 1
virtual ~Point(); // 2
float x() const; // 3
static int PointCount(); // 4
protected:
virtual ostream& print(ostream& os) const; // 5
float _x; // 6
static int _point_count; // 7
};
每個 Object 是一系列 Slots,每個 Slot 指向一個 member。
建構物件時會有類似指標陣列的東西,存放類別資料成員記憶體位置指標、成員函式位址指標。為讓類別產生的所有物件實體有標準表達,採用雙表格:
透過大廳牌找公司、透過花名冊找人,即物件構造過程。
從簡單模型演進,優化記憶體空間與存取時間,引入虛函式表方案:
vtbl)vptr),指向相關虛函式表vptr 由每個類別的建構函式、解構函式、copy assignment 自動設定/重置物業為提高效率,對長期穩定的公司/人員不再登記,只登記不穩定或不確定者。對應應用程式需重新編譯(為保持連貫請理解性思考,勿拘泥字面)。
C++ 物件模型 vs 雙表格模型:提高空間與存取時間效率,犧牲彈性。閱讀《深入 C++ 物件模型》感覺每個字都是重點。反覆閱讀後有些開竅,繼續努力。