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