成员初始化列表

上传人:mar****e6 文档编号:169221062 上传时间:2022-11-14 格式:DOCX 页数:3 大小:11.19KB
收藏 版权申诉 举报 下载
成员初始化列表_第1页
第1页 / 共3页
成员初始化列表_第2页
第2页 / 共3页
成员初始化列表_第3页
第3页 / 共3页
资源描述:

《成员初始化列表》由会员分享,可在线阅读,更多相关《成员初始化列表(3页珍藏版)》请在装配图网上搜索。

1、类对象的构造顺序是这样的:1分配内存,调用构造函数时,隐式/显示的初始化各数据成员初始化阶段可以是显式的或隐式的,取决于是否存在成员初始化表。隐式初始化阶段 按照声明的顺序依次调用所有基类的缺省构造函数,然后是所有成员类对象的缺省构造函数。 2.进入构造函数后在构造函数中执行一般计算计算阶段由构造函数体内的所有语句构成。在计算阶段中,数据成员的设置被认为是 赋值,而不是初始化。使用初始化列表有两个原因:1. 必须这样做:三种情况下需要使用初始化成员列表1) 对象成员;2) const修饰的成员;3) 引用成员数据;(1)如果有一个类成员,它本身是一个类或者是一个结构,而且这个成员它只有一个带参

2、数 的构造函数,而没有默认构造函数,这时要对这个类成员进行初始化,就必须调用这个类成 员的带参数的构造函数,如果没有初始化列表,那么他将无法完成第一步,就会报错。using namespace std;class ABCI public :ABC( int x, int y, int z):a(x),b(y),c(z) ;I private :I int a;int b;Iint c;class MyClassI public :MyClass( int a, int b, int c):abc(a,b,c) I private :ABC abc;;int main()IMyClass o(

3、1 ,2,3);Ireturn 0 ;(2) 当类成员中含有一个const成员时(3) 当类成员中含有一个引用时#include using namespace std;日 class ConstRef I public :ConstRef( int i);I void print();I private :int a;I const int b; / const 成员I int& c; / 引用ConstRef:ConstRef( int i):b(i),c(a) /含有一个const对象时,或者是一个引用时使用初始化 成员列表a = i; / ok/ b = i; / 错误I / c =

4、a; / 错误void ConstRef:print()Icout a endl;Icout b endl;cout c endl;int main()ICon stRef o(1 );Io.pr in t();Ireturn 0 ;2. 效率要求这样做:类对象的构造顺序显示,进入构造函数体后,进行的是计算,是对他们的赋值操作,显然, 赋值和初始化是不同的,这样就体现出了效率差异,如果不用成员初始化列表,那么类对 自己的类成员分别进行的是一次隐式的默认构造函数的调用,和一次复制操作符的调用,如 果是类对象,这样做效率就得不到保障。注意:构造函数需要初始化的数据成员,不论是否显式的出现在构造函数

5、的成员初始化列表 中,都会在该处完成初始化,并且初始化的顺序和其在声明时的顺序是一致的,与列表的先 后顺序无关,所以要特别注意,保证两者顺序一致才能真正保证其效率。现在明白为什么要使用成员初始化列表了。这里再强调一下类的初始化的顺序,应该是类成员变量的初始化不是按照初始化表的顺序被 初始化的,而是按照在类中声明的顺序被初始化的。这是摘自:Effective C+学习笔记:初始化列表中成员列出的顺序和它们在类中声明的顺序 相同 为什么会这样呢?我们知道,对一个对象的所有成员来说,它们的析构函数被调用的顺序总 是和它们在构造函数里被创建的顺序相反。那么,如果允许上面的情况(即,成员按它们 在初始化列表上出现的顺序被初始化)发生,编译器就要为每一个对象跟踪其成员初始化的 顺序,以保证它们的析构函数以正确的顺序被调用。这会带来昂贵的开销。所以,为了避 免这一开销,同一种类型的所有对象在创建(构造)和摧毁(析构)过程中对成员的处理顺 序都是相同的,而不管成员在初始化列表中的顺序如何。注意:上述内容不适用于static变量,static变量应该在类的构造函数前被初始化。

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!