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本身;
在此模型中,非静态数据成员被置于每个class object内,静态数据成员则被存放在个别class object之外。静态和非静态成员函数也被放在个别的class object之外。虚函数则以两个步骤支持
每个class产生出一堆指向虚函数的指针,放在表格之中,这个表格称为virtaual table每个class obect被安排一个指针,指向相关的virtual table对象模型如何影响程序
不同的对象模型,会导致“现有的程序代码必须修改”以及“必须加入新的程序代码”