其他语言

本类阅读TOP10

·基于Solaris 开发环境的整体构思
·使用AutoMake轻松生成Makefile
·BCB数据库图像保存技术
·GNU中的Makefile
·射频芯片nRF401天线设计的分析
·iframe 的自适应高度
·BCB之Socket通信
·软件企业如何实施CMM
·入门系列--OpenGL最简单的入门
·WIN95中日志钩子(JournalRecord Hook)的使用

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
深度探索C++对象模型第二章 构造函数语义学

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

2.1  Default Constructor 的建构操作
default constructors 在需要的时候才会被编译器产生出来。只有当编译器需要default constructor的时候才会合成出一个constructor, 只有下面的四种情况才会有nontrivial default constructor产生,其余的都是trivial default constructor

1) 带有Default Constructor 的 Member Class Object
如果一个class自己没有定义constructor,但是内含一个member object,而后者含有default constructor,那么次class的implicit default constructor 就是nontrivial,编译器会合成一个constructor .注意被合成出来的constructor 只满足编译器的需要,而不是程序员的需要(只完成他自己向要做的事情)。
如果含有多个class member object ,那么constructor 要求初始化操作按照member object 在class 中的申明次序调用各个的constructors。
2) 带有Default Constructor的Base Class
如果没有定义构造函数,编译器会产生一个nontrivial constructor,先调用相应的base class's constructor . 如果用户自己定义了constructor,那么编译器讲会扩展他,讲义调用所有比要至default constructors的程序代码加进去。
3) 带有一个Virtual Function 的 Class : 因为编译器必须要初始化VPTR 和 VTable!
4) 带有一个Virtual Base Class 的 Class : 在此之中,如果向要通过一个指针访问最顶端的class的data member,必须要通过"指向基类的指针"来完成。 pa->_vbcx->i=1024; 而_vbcx则是在class object的创建的时候完成的。

2.2  Copy Constructor的间够操作
由三种情况使用到Copy Constructor: object作为函数参数传递  函数的返回值是object  直接用一个同类实体最为初值而初始化
如果class没有定义copy constructor,那么编译器可能合成一个copy constructor--memberwise initialization,或者使用bitwise copy

出现不要,bitwise copy的情况和上面的default construcotr的情况一致,
1) class 内含一个member object, 而后者的class具有了一个copy constructor  2)当class 继承一个base class,而base class 好有一个copy constructor  3) class含有Virtual funciton   4) class白绳子一个继承串链,其中具有Virtual base classes .后面两种比较复杂,因为可能出现derived class 和base class之间的对象赋值的情况。必须要保证他们的VPTR的正确性。

2.4下列情况中,必须要使用member initialization list进行data member 的初始化:
1)当初始化一个referecnce member 2)当初始化一个cost member 3)当调用一个base class 的constructor,而他拥有一组参数的时候 4)调用一个member class 的constructor ,而他有一组参数
而kist中的项目次序是由class中的members声明次序决定的,而不是有initialization list中的排列次序决定。




相关文章

相关软件