C++语法之初始化列表(超级啰嗦版本)

1构造体函数赋值

我在C++必会语法之构造函数和析构函数-CSDN博客中介绍了构造函数,很多人可能理解构造函数的函数体就是将成员变量初始化的过程,但其实不是这样的,构造函数体的内容,只是将我我们初始化好的内容在进行一次赋值

构造函数体中的语句只能将其称为赋初值,而不能称作初始化。因为初始化只能初始
化一次,而构造函数体内可以多次赋值

2.初始化列表

初始化列表:以一个冒号开始,接着是一个以逗号分隔的数据成员列表,每个"成员变量"后面跟
一个放在括号中的初始值或表达式
成员变量的初始化实际上是在初始化列表初始化的,初始列表就是构造函数的一部分,代码如下。
class date
{
public:
	date(int year ,int month  ,int day)
		:_year(year)
		,_month(month)
		,_day(day)
	{
	}
	void print()
	{
		cout << _year << " " << _month << " " << _year << endl;
	}
private:
	int _year;
	int _month;
	int _day;
};

int main()
{
	date d1(2023,9,11);
	d1.print();
	return 0;
}

3.注意:

1.成员变量在初始列表中只能 出现一次,因为变量的初始化只有一次,赋值可以有无数次。

2.类中包含以下成员必须在初始化列表里初始化。

2.1引用成员变量(引用在定义的时候必须初始化,在构造函数体内赋值不可以)

2.2const修饰的成员变量(const修饰的变量不可以赋值,只能初始化)

2.3没有默认构造函数的自定义类型(因为自定义类型没有默认构造函数,创建新的对象时,就没有合适的初始值,需要手动传个值)

class A
{
public:
 A(int a)
 :_a(a)
 {}
private:
 int _a;
};

class B
{
public:
 B(int a, int ref)
 :_aobj(a)
 ,_ref(ref)
 ,_n(10)
 {}
private:
 A _aobj;  // 没有默认构造函数
 int& _ref;  // 引用
 const int _n; // const 
}

初始化列表还有一种玩法就是在声明的时候,给个缺省值,这个本质也是,把你初始化的这个值传给了初始化列表,切记这个是缺省值,就像备胎一样,只有你在不传值的时候才会用到。

private:
int i = 0;
int j = 5;
3. 尽量使用初始化列表初始化,因为不管你是否使用初始化列表,对于自定义类型成员变量
一定会先使用初始化列表初始化
4. 成员变量在类中声明次序就是其在初始化列表中的初始化顺序,与其在初始化列表中的先后
次序无关
声明顺序是_aobj,ref,_n,初始化顺序就是_aobj,ref,_n,与初始化列表的顺序无关,但是正常人都会保持这两个顺序一至。
private:
 A _aobj;  
 int& _ref;  
 const int _n; 

4.应用场景

切记构造函数函数体要和初始化列表一起混合着用,像下面的场景,就可以检查空间开辟是否失败。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值