您的位置:首页 > 编程语言 > C语言/C++

深入探索C++对象模型笔记一 —— 关于对象(上)

2011-05-19 21:46 381 查看
开篇就面向过程的C语言的体系进行了讲解,在C语言中,“数据”和“操作(函数)”是分开声明的。语言本身没有支持“数据和函数”之间的关联性。

在C++中,使用的是“抽象数据类型(ADT)”或“类层次的数据封装”。从软件工程的角度来看,C++威力更大。

C++加上封装后的布局成本:

c++在布局以及存取时间上主要的额外负担是由virtual引起的。包括:

Virtual function 机制 。用以支持一个有效率的“执行期绑定”(runtime binding)。

Virtual base class。用以实现“多次出现在继承体系中的base class,有一个单一而共享的实体”。

此外,还有一些多重继承下的额外负担。发生在“一个derived class和其第二或后继之base class的转换”之间。

C++对象模式:

在C++中,有两种class data members : static 和 nonstatic

有三种class member functions: static 、nonstatic 和 virtual

提出了几种模型原型:简单对象模型,表格驱动对象模型。

C++对象模型:

nonstatic data members 被配置与每一个 class object 之内,static data members 则被存放在所有的 class object之外

static 和 nonstatic function members 也被放在所有的 class object 之外

virtual function 则以两个步骤支持:

(1)每一个 class 产生出一堆指向 virtual functions 的指针,放在表格之中,这个表格被称为 virtual table(vtbl)

(2)每一个 class object 被添加了一个指针,指向相关的 virtual table,通常这个指针被称为 vptr。(vptr的设定和重置都由每一个 class 的 constructor、destructor 和 copy assignment 运算符自动完成。)

模型主要优点:空间和存取时间的效率

模型主要缺点:如果应用程序代码本身未曾改变,但所用到的class objects的nonstatic data members有所修改(可能是增加,移除或更改),那么那些应用程序代码同样得重新编译。(相对双表格模型来说,双表格模型提供了较大的弹性,因为它多提供了一层间接性,但是它因此也付出空间和执行效率两方面的代价)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: