【构造函数再探】

构造函数再探

赋值与初始化区别

赋值法如下:

class ConstRef{
	public:
		ConstRef(int ii);
	private:
		int i;
		const int ci;
		int & ri;
}
ConstRef::ConstRef(int ii){ //错误写法
	i = ii;
	ci = ii;
	ri = i;
}

初始化法如下:

ConstRef::ConstRef(int ii):i(ii),ci(ii),ri(i){};  //正确写法

Tag:如果成员是const、引用,或者属于某种未提供默认构造函数的类类型,我们通过构造函数初始值列表为这些成员提供初值。

成员初始化顺序

成员初始化顺序与成员定义顺序一致,而不受构造函数初始化列表影响
应该尽量避免使用某些成员初始化其他成员

默认实参和构造函数

如果一个构造函数为所有参数都提供了默认实参,则它实际上也定义了默认构造函数

委托构造函数

class Sales_data{
	//非委托
	Sales_data(string s,unsigned cnt,double price):bookNo(s),units_sold(cnt),revenue(cnt*price){}
	//委托
	Sales_data:Sales_data("",0,0){}
	Sales_data(string s):Sales_data(s,0,0){} //该构造函数委托给三参数构造函数
	Sales_data(istream &is)Sales_data(){read(is,*this)} //该构造函数委托给默认构造函数
}

委托后的执行顺序为:委托初始值列表->受委托初始值列表->受委托函数体->委托函数体

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值