C++对象模式
C++中有两种数据成员,static和nonstatic;以及三种成员函数:static,nonstatic,virtual
class Point {
public:
Point(float xvlal);
virtual ~Point();
float x() const;
static int PointCount();
protected:
virtual ostream& print(ostream &os) const;
float _x;
static int _point_count;
};
一个object是一系列的slots,每个slot指向一个members,members按其声明顺序,各被制定一个slot。members本身并不放在object之中。只有指向member的指针才放在object内 
表格驱动模型
另一种对象模型是把所有与members相关的信息抽出来,放在一个data member table和一个member function table之中,class object``本身则指向这两个表格的指针。membe function table是一系列的slots,每个slots,每个slot指出一个member function;Data member table则直接持有data本身; 
C++对象模型
在此模型中,非静态数据成员被置于每个class object内,静态数据成员则被存放在个别class object之外。静态和非静态成员函数也被放在个别的class object之外。虚函数则以两个步骤支持
- 每个
class产生出一堆指向虚函数的指针,放在表格之中,这个表格称为virtaual table - 每个
class obect被安排一个指针,指向相关的virtual table 
对象模型如何影响程序
不同的对象模型,会导致“现有的程序代码必须修改”以及“必须加入新的程序代码”
|