在 C++ 面向对象编程中,类的默认成员函数是非常重要的概念。当我们没有显式实现某些成员函数时,编译器会自动生成它们,这些函数被称为默认成员函数。本文将详细介绍 C++ 类的 6 个默认成员函数,包括构造函数、析构函数、拷贝构造函数、赋值运算符重载以及取地址运算符重载。
一、默认成员函数概述
默认成员函数是指用户没有显式实现,编译器会自动生成的成员函数。一个类在我们不写任何成员函数的情况下,编译器会默认生成以下 6 个默认成员函数:构造函数、析构函数、拷贝构造函数、赋值运算符重载、普通取地址运算符重载、const 取地址运算符重载。
其中前 4 个是我们需要重点掌握的,后两个在大多数情况下使用编译器自动生成的即可。另外,C++11 以后还增加了两个默认成员函数:移动构造和移动赋值,本文暂不讨论。
二、构造函数
构造函数是一种特殊的成员函数,其作用是在对象实例化时初始化对象,替代了我们以前手动调用的 Init 函数,并且会自动调用。
构造函数的特点:
- 函数名与类名相同
- 无返回值(不需要写 void)
- 对象实例化时系统会自动调用对应的构造函数
- 可以重载
- 若未显式定义,编译器会生成无参的默认构造函数;一旦用户显式定义,编译器不再生成无参构造函数
- 全缺省构造函数、编译器默认生成的构造函数都称为默认构造函数(不传实参即可调用),且这三者不能同时存在
- 编译器默认生成的构造函数对内置类型成员变量的初始化不确定,对自定义类型成员变量会调用其默认构造函数
构造函数示例
#include <iostream>
using namespace std;
class Date {
public:
// 无参构造函数
Date() {
_year = 1;
_month = 1;
_day = 1;
}
// 带参构造函数
Date(int year, int month, int day) {
_year = year;
_month = month;
_day = day;
}
// 全缺省构造函数(不能与无参构造同时存在)
// Date(int year = 1, int month = 1, int day = 1) {
// _year = year;
// _month = month;
// _day = day;
// }
void Print() {
cout << _year << "/" << _month << << _day << endl;
}
:
_year;
_month;
_day;
};
{
Date d1;
;
;
}


