C++ ——— 构造函数中的初始化列表
目录
前言
初始化列表的语法
初始化列表的意义
初始化列表的实际作用
前言
对于初始化列表的学习,同样以日期类来举例说明
C++ ——— 完善日期类-CSDN博客
初始化列表的语法
代码演示:
Data(int year = 1, int month = 1, int day = 1)
:_year(year)
,_month(month)
,_day(day)
{}
初始化列表可以写在构造函数中,以冒号开始,用逗号分割
代码验证:
这是的初始化列表就充当了构造函数初始化的功能,并且可以和构造函以前初始化的语法一起使用
代码演示:
Data(int year = 1, int month = 1, int day = 1)
:_year(year)
,_month(month)
{
_day = day;
}
初始化列表的意义
例如 const 修饰的成员变量,必须值定义的时候给值,否则在构造函数中复制就会报错
但初始化列表就能解决以上问题
声明了一个引用也是同样的道理,必须值定义的时候给值,所以也可以在初始化列表的时候给值
代码演示:
class A
{
public:
A(int c, int& i)
:_c(c)
,_ri(i)
{}
void Print()
{
cout << "_c = " << _c << endl << "_ri = " << _ri << endl;
}
private:
const int _c;
int& _ri;
};
代码验证:
初始化列表的实际作用
代码演示:
class A
{
public:
A(int capacity)
{
_a = (int*)malloc(sizeof(int) * capacity);
if (_a == nullptr)
{
perror("malloc fail");
exit(-1);
}
}
private:
int* _a;
};
class Double_A
{
public:
Double_A(int all_capacity)
:_a1(all_capacity)
,_a2(all_capacity)
{}
private:
A _a1;
A _a2;
};
在 A 这个类中,构造函数没有缺省值,那么在 Double_A 这个类中生成声明两个 A 类时就会报错
初始化列表就能解决这个问题,就在初始化列表的时候对 _a1 和 _a2 进行给值
代码验证: