构造函数的初始化列表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
//增加日期,CDate类是CGoods商品信息的一部分
class CDate
{
public:
CDate(int y,int m,int d): //没有默认构造函数了
{
_year=y;
_month=m;
_day=d;
}
void show()
{
cout<<_year<<"/"<<month<<"/"<<_day<<endl;
}
private:
int _year,_month,_day;

}

//CDate没有合适的默认构造函数可用
class CGoods
{
public:
CGoods(const char *n,int a,double p,int y,int m,int d)
:_date(y,m,d) //CDate _date(y,m,d)
,_price(p) //构造函数的初始化列表,对成员变量进行初始化
//int _price=p;
{

strcpy(_name,n); //strcpy的两个参数为指针char*
_amount=a; //int _amount=a; amount=a;

}
void show()
{
cout<<"_name:"<<_name<<endl;
cout<<"amount:"<<_amount<<endl;
cout<<"price:"<<_price<<endl;
_date.show();
}
private:
char _name[20];
int _amount;
double _price;
CDate _date; //用户自定义的成员对象,是会被初始化的: 1.分配内存 2.调用构造函数


}

int main()
{
CGoods g("apple",10,5.5,2025,3,5);
good.show();
}



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Test
{
public:
Test(int date=10)
:mb(date)
,ma(ma){}
void show()
{
cout<<"ma:"<<ma<<"mb:"<<mb<<endl;
}
private:
int ma;
int mb;
};
int main()
{
Test t;
//这里初始化t,按照private中的顺序初始化成员变量,先初始化ma,再初始化mb,ma按照初始化列表中ma=mb,此时mb无值,因此无效
t.show();
return 0;
}
//这里结果为ma无效,mb为10