关于初始化构造函数列表
来源:互联网 发布:有道词典linux版安装 编辑:程序博客网 时间:2024/05/05 20:22
构造函数初始化列表
构造函数初始化列表示例如下:
Sales_item::Sales_item(const string &book) : isbn(book), units_sold(0), revenue(0) { }
构造函数初始化列表以冒号开始,以逗号分隔数据成员,每个数据成员后面跟上其初始值,上面的构造函数将isbn成员初始化为book形参的值,将units_sold和revenue初始化为0,构造函数初始化列表只能出现在构造函数定义中而不是声明中。
Sales_item::Sales_item(const string &book){ isbn = book; units_sold = 0; revenue = 0.0;}
以上是在构造函数体内对成员变量进行赋值,那么上面两种方法有什么不同呢?
构造函数可以分两个阶段进行:
(1)初始化阶段;
(2)普通计算阶段。
计算阶段也就是由函数体内所有的语句组成。不管成员是否在构造函数初始化列表中显式初始化,类的数据成员初始化总是在初始化阶段进行,初始化阶段先于计算阶段。从这里可以看出,前面两种方式不同之处,构造函数初始化列表是对类的成员做初始化,而在构造函数体内只是对类的数据成员进行了一次赋值操作。
那么什么时候需要构造函数初始化列表呢?
(1) const成员
(2) 引用类型成员
(3) 没有默认构造函数的类成员
以上3种情况需要在构造函数初始化列表中对数据成员进行显式初始化。因为const和引用类型成员只能初始化,不能对其进行赋值操作。初始化顺序
构造函数初始化列表只是指定了成员的初始值,并没有指定初始化顺序,那么成员初始化顺序又是怎样的呢?成员的初始化顺序就是定义成员的顺序,第一个定义的成员首先被初始化,然后是第二个等等。初始化可以任意的表达式
初始化可以是任意复杂的表达式,例如:
Sales_item::Sales_item(const string &book){ isbn = book; units_sold = 0; revenue = 0.0;}
上述都是通过形参来决定初始值。
- 类类型的数据成员的初始化形式
初始化类类型的成员时,可以使用该类型任意的构造函数。
0 0
- 关于初始化构造函数列表
- 关于在构造函数初始化列表
- 构造函数初始化列表
- 构造函数初始化列表
- 构造函数初始化列表
- 构造函数初始化列表
- 构造函数初始化列表
- 构造函数初始化列表
- 构造函数初始化列表
- 构造函数初始化列表
- 构造函数初始化列表
- 构造函数初始化列表
- 构造函数初始化列表
- 构造函数初始化列表
- 构造函数初始化列表
- 构造函数初始化列表
- 构造函数初始化列表
- 构造函数初始化列表
- POJ2049 Finding Nemo 【优先队列+BFS】
- 最小的K个数
- 剖析 “‘最好的模板引擎’Beetl剖析及与Tiny模板引擎对比”
- 内存
- 利用spring线程池ThreadPoolTaskExecutor发送手机短信
- 关于初始化构造函数列表
- 处理机调度问题以及求响应比,作业周转时间和平均周转时间
- 如何在netbeans下指定jdk
- 细说工厂模式之抽象工厂模式(三)
- 产品经理20堂之第一课---个人笔记
- ios键盘收起的常见方法
- UITableView优化
- Java实现简单的日历小程序之Java图形界面开发小日历
- C#的第四节课