【正确答案】
【答案解析】构造函数初始化列表以一个冒号开始,接着是以逗号分隔的数据成员列表,每个数据成员后面都跟一个放在括号中的初始化式。例如,Example::Example:ival(0),dval(0.0){},其中ival与dval是类的两个数据成员。
在C++中,赋值与初始化列表的原理不一样,赋值是删除原值,赋予新值,初始化列表开辟空间和初始化是同时完成的,直接给予一个值。
所以,在C++赋值与初始化列表的使用情况也不一样,只能用初始化列表而不能用赋值的情况一般有以下3种:
1)当类中含有const(常量)、reference(引用)成员变量时,只能初始化,不能对它们进行赋值。常量不能被赋值,只能被初始化,所以必须在初始化列表中完成,C++的引用也一定要初始化,所以必须在初始化列表中完成。
2)基类的构造函数都需要初始化列表。构造函数的意思是先开辟空间然后为其赋值,只能算是赋值,不算初始化。
3)成员类型是没有默认构造函数的类。若没有提供显式初始化式,则编译器隐式使用成员类型的默认构造函数,若类没有默认构造函数,则编译器尝试使用默认构造函数将会失败。