- 初始化一个reference成员
- 初始化一个const成员
- 调用一个基类的构造函数,而该函数有一组参数
- 调用一个数据成员对象的构造函数,而该函数有一组参数
#includeusing namespace std; class A{ public: A(){} //没有显示提供其他构造函数才会调用。 A(const string& str="", int t=0):str(str),t(t){cout< public: C(){}; C(const string& str="",int t=0):str(str),t(t){cout< public: B():A("123",3),attention("456",3){} private: C attention; }; int main() { B b; return 0; }
3)4)中需要初始化列表的原因:
一个类(假设上例中的B)的构造函数执行顺序是:
虚拟基类的构造函数
基类的构造函数(上例中的A)
成员对象的构造函数(上例中的C)
自己的构造函数(B自己)
因此需要在B的构造函数后面用初始化列表直接初始化A和C的对象。
需要注意的是:在初始化列表中构造C类的对象时应该用B类自己的数据成员对象的名字–attention而不是用C。
若在B中没有用初始化列表:
此时如果A和C的构造函数使用的是默认构造函数,而不是自定义的有一组参数的构造函数:
是可以正常运行的。



