C++中的类
C中的:
typedef struct point3d{
float x;
float y;
float z;
}Point3D;
#define Point3d_print(pd) \
printf("%g, %g, %g", pd->x, pd->y, pd->z);
// ***
与C++中的
class Point3D{
public:
Point3D(float x = 0.0, float y = 0.0, float z = 0.0)
:_x(x), _y(y), _z(z){}
float x() { return _x;}
float y() { return _y;}
float z() { return _z;}
//----
private:
float _x;
float _y;
float _z;
};
加上封装后的布局成本
将Point3D封装成C++的类之后,布局成本增加了多少?
没有增加:
- 三个数据成员直接包含在每一个类对象(class object)中,就像 C中的结构体一样
- 虽然成员函数包含在了类声明中,但是不会出现在类对象中。
- 每一个非内联成员函数只会诞生一个函数实体
- 每一个内联成员函数(可以拥有0或者1个定义)会在每一个使用者身上产生一个函数实体
C++在布局以及存取时间上主要的额外负担是由vritual引用的。包括:
- 虚函数(virtual function)机制:用于支持一个有效率的执行期绑定
- 虚基类(vritual base class):用于实现“多次出现在继承体系中的基类,有一个单一而被共享的实体”
此外,还有一些多重继承下的额外负担,发生在“一个派生类和其第二会在后继的基类的转换”之间。
总之,C++不一定比C慢