什么是初始化列表,来看下面代码,我们有一个日期类对象
我们可以这样来定义构造函数:
class Date
{
public:
Date(int year,int month,int day)
{
_year = year;
_month = month;
_day = day;
}
protected:
int _year;
int _month;
int _day;
};
也可以利用初始化列表:
class Date
{
public:
Date(int year,int month,int day)
:_year(year),_month(month),_day(day) //使用初始话列表初始化成员变量
{
}
protected:
int _year;
int _month;
int _day;
};
如上两种方法来定义构造函数,一种是在构造函数体内对成员变量进行初始化,一种是使用构造函数来初始化成员变量,都可以达到初始化成员变量的效果,两者有什么区别呢?
在对于内置类型而言,我们还看不出效果
假如有如下需求,我们需要将日期类拓展为时间单位更精确。
//定义一个时间类
class Time
{
public:
Time(int hour = 0,int minute = 0,int second = 0)
{//定义一个全缺省构造函数
_hour = hour;
_minute = minute;
_second = second;
cout<<"Time();"<<endl;
}
protected:
int _hour;
int _minute;
int _second;
};
class Date
{
public:
Date(int year,int month,int day,int hour,int minute,int second)
{
_year = year;
_month = month;
_day = day;
_time = Time(hour,minute,second);
}
protected:
int _year;
int _month;
int _day;
Time _time;//时间类作为日期类的成员变量
};