C++的类构造函数的初始化列表相关知识

 基础知识

构造函数的初始化列表
*/
/*
类之间关系
	组合:一个类定义的对象成为另外一个类的成员对象。
	继承
*/
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个烫)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值