C++对象模型

C++对象模型

ID:38796255

大小:151.25 KB

页数:17页

时间:2019-06-19

C++对象模型_第1页
C++对象模型_第2页
C++对象模型_第3页
C++对象模型_第4页
C++对象模型_第5页
资源描述:

《C++对象模型》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、深度探索C++对象模型第一章关于对象C++对象模型语言中直接支持面向对象程序设计的部分。对于各种支持的底层实现机制。第I个概念是一种不变量。例如,c++class的完整virtualfunction在编译时期就固定下来了,程序员没有办法在执行期动态增加或取代其中的某一个。对象模型的底层实现机制,在语言层面上是看不出来的—虽然对象模型的语义本身可以使得某些实现品(编译器)比其他实现品更接近自然。C++在布局以及存取时间上主要的额外负担是由virtual引起的Virtualfunction机制用以支持一个由效率的“执行期绑定”Virtualbasclass用

2、以实现“多次出现在继承体系中的baseclass”有一个单一而被共享的实例。简单对象模型:一个object是一系列的slots,每一个slot指向一个members。表格驱动对象模型:C++对象模型:Nonstaticdatamembers被配置于每一个classobject之内,staticdatamembers则被存放在个别的classobject之外。Static和nonstaticfunctionmembers被放在object之外。对象的差异C++程序设计模型直接支持三种programmingparadigs:程序模型,抽象数据了类型模型,面向

3、对象模型。C++以下支持多态:经由一组隐式的转化操作。经由virtualfunction机制。经由dynamic_cast和typeid运算符。一个classobject的内存:其nonstaticdatamembers的总和大小。加上任何由于alignment的需求而填补上去的空间17/17加上为了支持virtual而由内部产生的任何额外负担。指针的类型指向不同类型之各指针间的差异,既不在其指针表示法不同,也不在其内容(代表一个地址)不同,而是在其所寻址出来的object类型不同。指针类型会教导编译器如何解释某个特定地址的内存内容及其大小:一个指向地址

4、1000的整数指针,在32为机器上,将涵盖地址空间1000~1003。一个指向地址1000而类型为void*的指针,涵盖的地址空间我们无法得知。这就是为什么一个类型为void*的指针只能够持有一个地址,而不能够通过它操作所指之object的缘故。转换其实是一种编译器指令。大部分情况下它并不改变一个指针所含的真正的地址,它只影响被指出之内存的大小和其内容的解释方式。多态所造成的一个以上的类型的潜在力量,并不能够实际发挥在“直接存取object”这件事情上。一个pointer或一个refrence之所以支持多态,是因为它们并不引发内存中任何与类型有关的内存委

5、托操作;会受到改变的,只有它们所指向的内存的“大小和内容解释方式”。任何企图改变object的大小,会违反其定义中受到契约保护的“资源需求量”当基类直接初始化给派生类对象时,派生类对象会发生切割。反之会发生溢出。第二章构造函数语义学当编译器需要defaultconstructor时会合成它。对于一个类,如果没有任何user-declaredconstructor,那么会有一个defaultconstruct被隐式声明出来下面四种情况下implicitdefaultconstructor会被视为nontrivial带有defaultconstruct的me

6、mberclassobject如果一个class没有任何constructor,但它内含一个memberobject,而后者有defaultconstructor,那么这个class的implicitdefaultconstructor就是nontrivial,编译器需要为该class合成出一个defaultconstructor。不过这个合成操作只有在constructor真正需要被调用时才会发生。如果一个类内含一个或一个以上的memberclassobjects,那么类的每一个constructor必须调用每一个memberclass的default

7、construct。编译器会扩张已存在的constructors,在其中安插一些代码,使得usercode被执行之前,先调用defaultconstructors。如果classmemberobjects都要求constructor初始化操作,c++要求以memberobject在class中的声明顺序来调用各个constructors。带有defaultconstructor的baseclass带有一个virtualfunction的class一个virtualfunctiontable会被编译器产生出来,内放class的virtualfunction

8、地址。在每一个classobject中,一个额外pointermember会被编

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。