关于初始化构造函数列表
2016-07-14 15:58
155 查看
构造函数初始化列表
构造函数初始化列表示例如下:
构造函数初始化列表以冒号开始,以逗号分隔数据成员,每个数据成员后面跟上其初始值,上面的构造函数将isbn成员初始化为book形参的值,将units_sold和revenue初始化为0,构造函数初始化列表只能出现在构造函数定义中而不是声明中。
以上是在构造函数体内对成员变量进行赋值,那么上面两种方法有什么不同呢?
构造函数可以分两个阶段进行:
(1)初始化阶段;
(2)普通计算阶段。
计算阶段也就是由函数体内所有的语句组成。不管成员是否在构造函数初始化列表中显式初始化,类的数据成员初始化总是在初始化阶段进行,初始化阶段先于计算阶段。从这里可以看出,前面两种方式不同之处,构造函数初始化列表是对类的成员做初始化,而在构造函数体内只是对类的数据成员进行了一次赋值操作。
那么什么时候需要构造函数初始化列表呢?
(1) const成员
(2) 引用类型成员
(3) 没有默认构造函数的类成员
以上3种情况需要在构造函数初始化列表中对数据成员进行显式初始化。因为const和引用类型成员只能初始化,不能对其进行赋值操作。
初始化顺序
构造函数初始化列表只是指定了成员的初始值,并没有指定初始化顺序,那么成员初始化顺序又是怎样的呢?成员的初始化顺序就是定义成员的顺序,第一个定义的成员首先被初始化,然后是第二个等等。
初始化可以任意的表达式
初始化可以是任意复杂的表达式,例如:
上述都是通过形参来决定初始值。
类类型的数据成员的初始化形式
初始化类类型的成员时,可以使用该类型任意的构造函数。
构造函数初始化列表示例如下:
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; }
上述都是通过形参来决定初始值。
类类型的数据成员的初始化形式
初始化类类型的成员时,可以使用该类型任意的构造函数。
相关文章推荐
- 在一台电脑上运行两个tomcat
- 最小的K个数
- 匿名方法实现多线程同步到主线程执行
- 不良资产处置(五):不同国家不良资产处置案例分析
- soapui 常用包和函数
- session入库
- 【NOIP2016A组模拟7.13】搬运干草捆
- LinkedList基本用法
- 项目:个人主页=>用户头像(以及头像裁剪)+用户信息(点点点,查看更多)+滚动加载
- Intent 各种跳转
- Ubuntu会怎么玩物联网平台
- 剑指offer-5-面试31:连续子数组的最大和(时间效率)
- httpd.conf服务器配置简单介绍
- 静态路由的配置方法
- Linux中查看CPU信息【转】
- windows安装rsync
- centos python 安装 readability
- 利用双缓冲队列来减少锁的竞争
- JVM的GC日志分析
- CNN的训练图像与测试图像不一致的多尺度问题