C++ 类和对象(二):默认成员函数详解
在 C++ 面向对象编程中,类的默认成员函数扮演着关键角色。当我们没有显式实现某些功能时,编译器会自动生成它们。本文将深入解析这六个默认成员函数:构造函数、析构函数、拷贝构造函数、赋值运算符重载以及取地址运算符重载。
默认成员函数概述
默认成员函数是指用户未显式实现,由编译器自动生成的成员函数。一个类在不写任何成员函数时,编译器会默认生成以下六种:
- 构造函数
- 析构函数
- 拷贝构造函数
- 赋值运算符重载
- 普通取地址运算符重载
- const 取地址运算符重载
其中前四项是日常开发的核心,后两项通常使用编译器生成的版本即可满足需求。另外,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;
;
;
}


