这本书是 Stanley B. Lippman于1996年所写,而最早的c++标准是 ISO/IEC 14882:1998[18],即C++98。
Chapter 1: Object Lessons
1.1 类定义:包含普通函数,虚拟函数,静态函数;静态域和非静态域
a simple object module : 这个模型中,一个对象就是一个slot的序列,一个slot代表一个成员,排列顺序与声明顺序相同。所有成员都通过指针访问, 这引入了指针--成员的概念。
a table-driven object module: 通过一个数据成员表直接保存数据,一个成员函数表保存所有成员函数的引用。
c++ object module : 非静态数据成员直接在对象中分配,静态数据成员在对象外独立分配,静态和非静态函数也在对象外。对于虚拟函数,对象中保存了一个vptr指向一个虚拟函数表,表中保存了虚拟函数的指针和type_info(用于runtime type identification)。 主要的缺点是:由于非静态数据成员直接分配在对象中,即使使用该对象的源码没有改变,也需要重新编译。
增加继承:直接包含一个指向基类的指针,或者放弃所有的间接性,直接在对象中保存基类的数据成员。虚拟基类的实现时,要么在对象中增加一个指针,要么增加一个虚拟基类表或者扩展已有的虚拟表,Section 3.4 具体讨论。
1.2 A Keyword Distinction