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
对象模型如何影响程序
不同的对象模型,会导致“现有的程序代码必须修改”以及“必须加入新的程序代码”
|