类与对象的默认成员函数:构造函数的一些基础知识

一、定义
构造函数,顾名思义,就是起到构造作用的函数。当我们创建类的一个对象时,会自动调用构造函数。构造函数是对象调用的第一个函数,它不需要用户显式调用,也不能由用户显式调用,只会在对象创建时执行。
二、作用
确保每个对象的所有数据成员都有一个明显的初始值(sensible initial value)。
三、特性及相关代码的演示
构造函数是特殊的成员函数,需要注意的是,构造函数的虽然名称叫构造,但是需要注意的是构造函数的主要任务并不是开空间创建对象,而是初始化对象。
其特征如下:

  1. 函数名与类名相同。
  2. 无返回值。
  3. 对象实例化时编译器自动调用对应的构造函数。
  4. 构造函数可以重载。
  5. 如果类中没有显式定义构造函数,则C++编译器会自动生成一个无参的默认构造函数,一旦用户显式定义编译器将不再生成

验证代码

class date {
public:
	//1.无参构造函数
	date() {
		_year = 1111;
		_month = 2;
		_day = 2;
	}
	//2.带参构造函数
	date(int year, int month, int day) {
		_year = year;
		_month = month;
		_day = day;
	}
	//3.若是没有显式定义构造函数,则编译器自动生成
	//若是显式定义了构造函数,编译器不再生成默认构造函数
	
	//3.重载构造函数
	date(float a) {

	}
	void display() {
		cout << _year << " " << _month << " " << _day << endl;
	}
private:
	int _year;
	int _month;
	int _day;
};

void test1() {
	date d1;//调用无参构造函数
	d1.display();

	date d3();
	//注意:通过无参构造函数创建对象时,对象后面不用跟括号,否则就成了函数声明
	//声明d3函数,该函数无参,返回一个日期类型的对象

	date d2(2020, 6, 1);
	d2.display();
}

6.无参的构造函数和全缺省的构造函数都称为默认构造函数,并且默认构造函数只能有一个。注意:无参构造函数、全缺省构造函数、我们没写编译器默认生成的构造函数,都可以认为是默认成员函数
所以,这三种只能有一种存在

// 默认构造函数
//像下面这种的类,就会因为Date中包含多个默认构造参数而无法通过编译
class Date
{
public:
	Date()
	{
		_year = 1900;
		_month = 1;
		_day = 1;
	}
	Date(int year = 1, int month = 1, int day = 1)
	{
		_year = year;
		_month = month;
		_day = day;
	}
private:
	int _year;
	int _month;
	int _day;
};

void Test()
{
	Date d1;
}
  1. 关于编译器生成的默认成员函数,很多童鞋会有疑惑:在我们不实现构造函数的情况下,编译器会生成默认的构造函数。但是看起来默认构造函数又没什么用?d对象调用了编译器生成的默认构造函数,但是d对象year/month/_day,依旧是随机值。也就说在这里编译器生成的默认构造函数并没有什么卵用??
    解答:C++把类型分成内置类型(基本类型)和自定义类型。内置类型就是语法已经定义好的类型:如int/char…,自定义类型就是我们使用class/struct/union自己定义的类型,看看下面的程序,就会发现编译器生成默认的构造函数会对自定类型成员_t调用的它的默认成员函数
class time {
public:

private:
	int hour;
	int minute;
	int second;
};
class Date
{
public:
	Date()
	{
		_year = 1900;
		_month = 1;
		_day = 1;
	}
	Date(int year, int month, int day)
	{
		_year = year;
		_month = month;
		_day = day;
	}
	void print() {
		cout << _year << " " << _month << " " << _day << " " << endl;
	}
private:
	int _year;
	int _month;
	int _day;
	time _t;
};
void test2() {
	Date d1;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值