基础知识
构造函数的初始化列表
*/
/*
类之间关系
组合:一个类定义的对象成为另外一个类的成员对象。
继承
*/
class Data
{
public:
Data(int y, int m, int d)//当你自定义一个构造函数,编译器不给你产生默认的构造函数
{
_year = y;
_month = m;
_day = d;
}
void show()
{
cout << _year << "/" << _month << "/" << _day << endl;
}
private:
int _year;
int _month;
int _day;
};
class CGoods
{
public:
CGoods(const char *n, int a, double p,int y,int m,int d)
:_data(y, m, d)//构造函数的初始化列表
,_amount(a)
,_price(p)
{
strcpy(_name, n);
}
void show()
{
cout << _name << " " << _amount << " " << _price << endl;
_data.show();
}
private:
char _name[20];
int _amount;
double _price;
Data _data;
};
初始化列表的注意点:
结论初始化的顺序只与成员变量定义的顺序有关,与初始化列表的先后顺序无关。
class Test
{
public:
Test(int data = 10)
:mb(data),
ma(mb)
{
}
void show()
{
cout << "ma:" << ma << "mb:" << mb << endl;
}
private:
int ma;
int mb;
};
运行的结果是:
扩展:
-858993460是0xcccccccc的值,默认在栈帧上开辟空间在VS中编译器默认给其初始化(如果用户不做初始化,只做声明的话)为0xcccccccc,转化为整数就是-858993460;字符串的话就是"烫烫烫烫"。
测试代码:
int x1 = 0xcccccccc;
char *x2 = new char[64];
memset(x2, 204, 64);
cout << x1 << " " << x2 << endl;
结果:(一个烫占俩个字节故64字节的空间用cc(204)填充的话就是32个烫)