C++對象模型

搞點興奮神經的東西來活力我的早晨,而那個就是桌面上的C++對象模型了。

看這本書的目的不在於奇淫巧技,更想去體悟思想層面的東西,以獲得一些編程心智上的開發。廢話少說,看看書中給出的一個說明C++對象模型的例子吧。

class Point {
public:
POINT(float xval);
virtual ~Point();

float x() const;
static int PointCount();

protected:
virtual ostream & print(ostream &os) const;

float _x;
static int _point_count;
};

然後作者說:Stroustrup當初設計的C++對象模型是從簡單對象模型派生而來的,並對內存空間和存取時間做了優化。在此模型中,nonstatic data members被配置於每一個class object之內,static data members則被存放在所有的class object之外。static和nonstatic function members也被存放在所有的class object之外。virtual functions則以兩個步驟支持之。

1.每一個class產生一堆指向virtual functions的指針,放在表格之中。這個表格被稱爲virtual table。

2.每一個class object被添加了一個指針,指向相關的virtual table。通常這個指針被稱爲vptr。vptr的設定和重置都由每一個class的construction destructor和copy assignment運算符自動完成。每一個class所關聯的type_info object(用以支持runtime type identification, RTTI)也經由virtual table被指出來,通常是放在表格的第一個slot處。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章