好多年以前学习过候杰老师翻译的《深度探索C++对象模型》,现在抽空复习一边。

C语言中“数据”和“函数”之间无关联性,所以C是程序性的,其由一组“分布在各个以功能为导向的函数中”的算法驱动。

C++加上封装后相比C布局成本增加了多少?

所以比较结构体和C++对象,实现同样的功能,C++对象几乎没有增加额外的成本。

C++在布局和存取时间上主要的额外负担是由 virtual 引起的,包括:

还有一些多重继承下的额外负担,发生在 derived class 和 base class 的转换上。

1.1 C++ 对象模式

C++中有两种 class data members:

三种 class member functions:

C++ 对象模型

加上继承

C++ 单一继承:

class ios {};
class istream : public ios {};
class iostream : public istream {};

C++ 多重继承:

class iostream : 
    public istream,
    public ostream {};

C++ 虚拟继承:

class istream : virtual public ios {};
class ostream : virtual public ios {};

虚拟继承下, base class 不管在继承串链中被派生多少次,永远只会存在一个实体。