意义
初始化列表是类中构造函数的一部分,用于实例化类中变量时 赋初值。
需要先了解 构造函数的基本知识。CSDN-构造函数https://blog.csdn.net/weixin_44212838/article/details/124901019?spm=1001.2014.3001.5501
用法
在函数头与函数体之间,用一个‘ :’列出变量,变量后用‘()’ 给出实例化该变量时要赋予的初值
用例:
class Date {
public:Date(int year, int month, int day):_year(year), _month(month),_day(day)//初始化列表{;}
private:int _year;int _month;int _day;
};
与在函数体内初始化的区别
初始化列表 实在实例化,也就是为变量开辟空间后,立刻赋予初始值。
类似于
int a=10;//实例化时赋予初始值
而在构造函数体内初始化 ,则是先为变量开辟空间,后赋予值。
类似于
int a;//先为变量开辟空间
a=10;//后赋予值
常见的使用场景
1.调用类中 自定义类型成员的构造函数
#include<iostream>
class a {
public:a(int val,int date) {_val = val;}
private:int _val;int _date;
};
class A {
public:A(int val = 1) :ma(5,4){_val = val;}int _val;a ma;
};
因为 class a没有默认构造函数,需要主动传参,而构造函数只能在实例化对象的时候调用,并且要先实例化成员变量才会进入class A的构造函数体内,所以,只能使用class A的初始化列表来调用class a的构造函数 初始化A的 成员变量ma。
2.类中 const修饰的成员变量
#include<iostream>
class A {
public:A(int val):_val(val){}const int _val;
};
int main() {A a (2);std::cout << a._val;return 0;
}
具有常属性的变量需要在实例化时赋初值
3.类中 引用类型的成员变量
#include<iostream>
class A {
public:A(int val):_val(val),mval(_val){}const int _val;const int& mval;
};
int main() {A a (2);std::cout << a.mval;return 0;
}
以上这就是初始化列表非常典型的使用场景。