C++ ——— 构造函数中的初始化列表

目录

前言

初始化列表的语法

初始化列表的意义

初始化列表的实际作用


前言

对于初始化列表的学习,同样以日期类来举例说明

C++ ——— 完善日期类-优快云博客


初始化列表的语法

代码演示:

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 进行给值

代码验证:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值