目录
一、类的六个默认成员函数
如果一个类中什么成员都没有,简称为空类。空类中什么都没有吗?实际并非如此,任何一个类在我们不写的情况下,都会自动生成下面6个默认成员函数。
二、构造函数
1、定义
#include <iostream>
using namespace std;
class Date
{
public:
void SetDate(int year, int month, int day)
{
_year = year;
_month = month;
_day = day;
}
void Display()
{
cout << _year << "-" << _month << "-" << _day << endl;
}
private:
int _year;
int _month;
int _day;
};
int main()
{
Date d1, d2;
d1.SetDate(2018, 5, 1);
d1.Display();
d2.SetDate(2018, 7, 1);
d2.Display();
return 0;
}
对于上述Date类,可以通过setDate共有方法对对象设置内容,但是如果每次创建对象都调用该方法设置信息,可能显得有些麻烦,那么有可能在创建对象时,就将信息设置进去呢?
构造函数就很好的解决了这个问题。
构造函数是一个特殊的成员函数,名字与类名相同,创建类类型对象时由编译器自动调用,保证每个数据成员都有一个合适的初始值,并且在对象的生命周期内只能调用一次。
2、特性
构造函数的主要任务不是开辟空间创建对象,而是初始化对象。
其主要特性如下:
1)函数名与类名相同
2)无返回值
3)对象实例化时编译器自动调用对应的构造函数
4)构造函数可以重载
5)如果类中没有显示定义构造函数,则C++编译器会自动生成一个无参数的默认构造函数,一旦用户显式定义编译器将不再自动生成。
#include <iostream>
using namespace std;
class Date
{
public:
//1.无参构造函数
Date(){}
//2.有参构造函数
Date(int year, int month, int day)
{
_year = year;
_month = month;
_day = day;
}
void Display()
{
cout << _year << "-" << _month << "-" << _day << endl;
}
private:
int _year;
int _month;
int _day;
};
int main()
{
Date d1;//调用无参构造函数
d1.Display();
Date d2(2018, 5, 1);//调用有参构造
d2.Display();
return 0;
}
【注意】
如果通过无参构造函数创建对象时,对象后面不用跟括号,否则就成了函数说明。
Date d3();
//实际是声明了一个d3函数,该函数没有参数,返回一个日期类型的对象。
6)无参构造函数和全缺省的构造函数都称为默认构造函数,并且默认构造函数只能有一个。
【注意】无参构造函数,全缺省构造函数、编译器默认自