1.类的6个默认的成员函数
用户没有自己实现,编译器去自动生成的成员函数为默认成员函数
1.初始化和清理函数
- 构造函数完成初始化
- 析构函数完成销毁工作
2.拷贝和复制
- 拷贝构造用于同类对象初始化创建对象
- 赋值重载使对象之间可以赋值
3.取地址重载
- 普通对象和const对象取地址,比较少自己实现
2. 构造函数
构造函数不会开空间创建对象,只会初始化对象
- 函数名于类名相同,且没有返回值
- 对象实例化时编译器自动调用
- 可以重载
- 在对象整个生命周期中只调用一次
class Date
{
public:
// 1.无参构造函数
Date()
{}
// 2.带参构造函数
Date(int year, int month, int day)
{
_year = year;
_month = month;
_day = day;
}
private:
int _year;
int _month;
int _day;
};
void TestDate1()
{
Date d1; // 调用无参构造函数
Date d2(2015, 1, 1); // 调用带参的构造函数
Date d3();
}
5.如果类中用户没有定义自己的构造函数,C++编译器会自动生成默认构造函数,一旦用户显示定义编译器就不再生成默认构造函数
6.默认构造函数只会处理自定义类型,不会处理内置类型。初始化自定义类型时调用的是该自定义类型的默认成员函数。
7.默认构造函数只能由一个,并且无参的构造函数,全缺省的构造函数,编译器默认生成的构造函数都是默认构造函数 。
3.析构函数
对象在销毁时自动调用析构函数,完成对象的清理工作
- 析构函数名为在类名前加上~
- 无参数无返回类型
- 不能重载,且一个类只能有一个析构函数
- 对象生命周期结束时自动调用
class Time
{
public:
~Time()
{
cout << "~Time()" << endl;
}
private:
int _hour;
int _minute;
int _second;
};
class Date
{
private:
// 基本类型(内置类型)
int _year = 2023;
int _month = 12;
int _day = 12;
// 自定义类型
Time _t;
};
int main()
{
Date d;
return 0; }