- 初始化一个reference成员
- 初始化一个const成员
- 调用一个基类的构造函数,而该函数有一组参数
- 调用一个数据成员对象的构造函数,而该函数有一组参数
#include <iostream>
using namespace std;
class A{
public:
A(){}
A(const string& str="", int t=0):str(str),t(t){cout<<str<<" "<<t<<endl;}
private:
string str;
int t;
};
class C{
public:
C(){};
C(const string& str="",int t=0):str(str),t(t){cout<<str<<" "<<t<<endl;}
private:
string str;
int t;
};
class B:public A{
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的构造函数使用的是默认构造函数,而不是自定义的有一组参数的构造函数: 是可以正常运行的。
|