C/C++编程:C++类封装的布局成本

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慢

上一篇:实验一 Java开发环境的安装与配置


下一篇:C# 操作文件常用的方法