1.再探构造函数
之前的构造函数,初始化成员变量主要使用函数体内赋值,构造函数初始化还有一种方式,就是初始化列表,初始化列表的使用方式是以一个冒号开始,接着是一个以逗号分隔开的数据成员列表,每个“成员变量”后面跟一个放在括号中的初始值或表达式
Date(int year, int month, int day)
:_year(year)
, _month(month)
, _day(day)
{}
每个成员变量在初始化列表只出现一次,语法理解上初始化列表可以认为是每个成员变量定义初始化的地方
引用成员变量,const成员变量,没有默认构造的类类型变量,必须放在初始化列表位置进行初始化,否者编译报错
//text.cpp
#include<iostream>
using namespace std;
class Date
{
public:
Date(int& xx, int year, int month, int day)
:_year(year)
, _month(month)
, _day(day)
//引用类型,静态变量初始化,没给默认构造,系统虽然自动生成,还是会走初始化列表
,_n (1)
,_ref(xx)
{}
private:
//声明
int _year;
int _month;
int _day;
const int _n;
int& _ref;
};
int main()
{
int xx = 5;
//对象定义
Date d1(xx, 2024,7, 15);
return 0;
}
- C++11支持在成员变量声明的位置给缺省值,这个缺省值主要是给没有显示在初始化列表初始化的成员使用的
//text.cpp
#include<iostream>
using namespace std;
class Time
{
public:
Time(int hour)
:_hour(hour)
{
//cout << "Time()" << endl;
}
private:
int _hour;
};
class Date
{
public:
Date(int& xx, int year, int month, int day)
:_year(year)
, _month(month)
{}
void Print()
{
cout << _year <<" " << _month <<" " << _day << endl;
}
private:
//声明 ,缺省值->初始化列表用的
int _year=1;
int _month&#