C++ 类和对象(下)

一、初始化列表

1.之前实现构造函数时,初始化成员变量主要使用函数体内赋值,构造函数初始化还有一种方式,就是初始化列表。

其使用方式:以一个冒号开始,接着以一个逗号分隔的数据成员列表,每个“成员变量”后面跟一个放在括号中的初始值或表达式。 

2.每个成员变量在初始化列表中只能出现一次,语法理解上初始化列表可以认为是每个成员变量定义的地方

3.以下成员变量必须放在初始化列表位置进行初始化,否则编译会报错

·引用成员变量

·const成员变量

·没有默认构造的类类型变量

class Time
{

public:
	Time(int hour )//没有默认构造,必须主动传参
		: _hour(hour)
	{
		cout << "Time()" << endl;

	}
private:
	int _hour;
};

class Date
{

public:
	Date(int& x, int year = 2025, int month = 2, int day = 11)
		:_year(year)
		,_month(month)
		,_day(day)
		/*,_t(12)
		,_ret(x)
		,_n(1)*/      //如果不在初始化列表初始化就会报错
	{

	}

	void Print()const
	{
		cout << "_year" << "/" << "_month" << "/" << "_day" << endl;
	}

private:
	int _year;
	int _month;
	int _day;

	Time _t;   //没有默认构造
	int& _ret;  //引用
	const int _n;  //const
};

int main()
{

	int i = 0;
	Date d1(i);
	d1.Print();
	return 0;
}

4.尽量使用初始化列表初始化,因为那些你不在初始化列表初始化的成员也会走初始化列表。(每个成员都要走初始化列表)

·若这个成员在声明位置给了缺省值,初始化列表会用这个缺省值初始化。

class Date
{

public:

private:
	//这些个缺省值是给初始化列表的,
	// 如果初始化列表没有显示初始化,就会用这个缺省值初始化
	int _year=2025;
	int _month=2;
	int _day=11;

	Time _t=1;
	int* _ret=(int*)malloc(10);
	const int _n=1;
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值