C++对象模型<一>
2015-09-22 23:21
441 查看
封装带来的负担?
假设在C语言中有如下代码:[code]typedef struct point3d { float x; float y; float z; }Point3d; void func() { Point3d *pd = get_a_point(); printf("(%g, %g, %g )", }
如果转换为C++则我们会倾向于使用抽象数据类型来封装(ADT):
[code] class Point3d; ostream& oprator<<(ostream &os, const Point3d &pt); class Point3d{ friend ostream& oprator<<(ostream &os, const Point3d &pt) public: Point3d(float x = 0, float y = 0, float z = 0): _x(x), _y(y), _z(z){} float x(){return _x;} float y(){return _y;} float z(){return _z;} //....etc private: float _x; float _y; float _z; }; inline ostream& oprator<<(ostream &os, const Point3d &pt) { //os <<.... }
对这种转换来说,空间布局成本是没有增加的。因为3个数据成员直接包含在类中,而类中的成员函数却是独立于类存在的,每一个非inline成员函数仅会生成一个实例。不过inline成员函数会在每个模块上产生一个函数实例。
C++ 在布局和存取时间上主要的额外负担来自于virtual机制,包括
1. virtual function机制
2. virtual base class机制
待续。。。。
相关文章推荐
- C++友元
- c语言初级小程序
- 《C++primer(第五版)》学习之路-第七章:类
- C++11中的右值引用及move语义编程
- 模仿R语言c++ 向量类c 矩阵类matrix等(持续更新 欢迎指点)
- C++编程思想学习笔记----第11章 引用和拷贝构造函数
- 浅谈JAVA和C++两者的参数传递
- 用C语言编写的简单的猜数字游戏
- 非类型模板参数
- C++输入不定长度的字符串
- C语言中,二级指针的三种内存模型
- C++中内联函数的效率问题
- C++11变参模板的参数包
- C++中函数的重载
- C++ 堆 和 堆 分析
- C++函数的默认值问题
- More Effective C++ 条款16 谨记80-20法则
- c/c++ 获取当前程序(EXE)所在的路径
- opencv在C++窗体程序中 导包出错
- C++中相对路径与绝对路径以及斜杠与反斜杠的区别