C++构造函数初始化及其特性

C++构造函数是类的一个默认成员函数,构造函数函数名与类名一致,无返回值,但是不用显示地在前面写上void,构造函数是起到初始化的作用。构造函数具有许多特性,构造函数可以无参,也可以有参数。无参的或者全缺省的构造函数称为默认构造。如果我们不自己定义构造函数,编译器就会自动生成一个默认构造。如果我们自己写了构造函数(带参数的),编译器就不会自动生成构造函数了。
对于初始化的几种形式:以日期类为例
1、编译器默认生成构造函数

class Date
{
public:

private:
	int _year;
	int _month;
	int _day;
};

这种情形就是编译器默认生成一个构造函数,但是默认生成的构造函数不会对成员变量初始化。
2、由我们自己写一个默认构造函数,但是函数无参

class Date
{
public:
	Date()
	{

	}
private:
	int _year;
	int _month;
	int _day;
};

这种也是一种构造函数。
3、全缺省的构造函数

class Date
{
public:
	Date(int year = 1, int month = 1, int day = 1)
	{
		_year = year;
		_month = month;
		_day = day;
	}
private:
	int _year;
	int _month;
	int _day;
};

这3中在类实例化的时候,就可以不用传参。比如说:

int main()
{
	Date d1;

	return 0;
}

4、在声明成员变量的时候就给缺省值

class Date
{
public:

private:
	int _year = 1;
	int _month = 1;
	int _day = 1;
};

这里构造函数也可以写上
5、在声明成员变量的时候给缺省值,同时写全缺省的构造函数

class Date
{
public:
	Date(int year = 2024, int month = 4, int day = 3)
	{
		_year = year;
		_month = month;
		_day = day;
	}
private:
	int _year = 1;
	int _month = 1;
	int _day = 1;
};

这个时候,成员变量初始化的值要么是全缺省的构造函数的形参值,要么是实例化的时候手动输入的值。

构造函数还有初始化列表

class Date
{
public:
	Date()
		:_year(0),
		_month(0),
		_day(0)
	{

	}
private:
	int _year;
	int _month;
	int _day;
};

在构造函数后面紧跟着一个冒号,初始化的值用圆括号写在成员变量后,用逗号分隔。初始化列表无论写不写,编译器都会走一遍,区别在于不手动写的话,就是随机值,手动写了就用你写的值。通常来说建议成员变量都规范到初始化列表进行初始化。

关于初始化还有许多复杂的知识,比如:const修饰的成员变量如何初始化?引用成员变量如何初始化?没有默认构造的类成员变量如何初始化?

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值