C++学习之构造函数初始化式

来源:互联网 发布:黑鹰坠落真实事件知乎 编辑:程序博客网 时间:2024/06/10 15:16

众所周知,构造函数的job就是保证每个对象的数据成员具有合适的初始值


//假设name(string),stuNum(int),grade(int)都是类myClass的数据成员class myClass::myClass(){name = "1班";stuNum = 60;grade = 2;}

一直认为上面构造函数的函数体内三行便是对数据成员的初始化,今天一个偶然的bug给了我当头一棒,看了看Primer才知道那是赋值不是初始化。。。。。。

其实构造函数的执行是分两个阶段的:1、初始化阶段 2、普通的计算阶段 。(计算阶段由构造函数的函数体内的所有语句组成,成员变量的初始化发生在计算阶段之前!!!)

那么我们怎么对成员变量初始化?

1、通过构造函数的初始化列表,提倡!!

2、不使用初始化列表:(1)、类类型的成员变量会使用默认构造函数初始化;(2)、内置类型:依据变量的作用域--全局初始化,局部不初始化。

不过还是得注意:

1、构造函数的初始化列表指在构造函数的的定义中而不是声明中指定

2、有些变量必须使用初始化列表初始化:没有默认构造函数的类类型变量、const成员变量、引用类型的变量