C++ 类的核心函数与默认成员函数全解析

C++类核心函数详解

在 C++ 中,类不仅是数据的封装,更重要的是它的成员函数管理对象的生命周期和行为。理解类的核心函数,有助于我们写出安全、性能高效的代码。今天,我们来聊聊 C++ 类的核心函数:构造函数、析构函数、拷贝构造函数、赋值运算符重载以及默认成员函数。

1. 默认成员函数

默认成员函数是指用户没有显式实现时,编译器自动生成的函数。常见的有六种,其中前四种最重要:

  1. 默认构造函数

  2. 拷贝构造函数

  3. 赋值运算符重载

  4. 析构函数

C++11 以后,还增加了:

  1. 移动构造函数

  2. 移动赋值运算符

学习默认成员函数,我们关注两点:

  • 编译器自动生成的函数行为是否满足需求

  • 如果不满足需求,我们该如何自己实现

2. 构造函数

构造函数是特殊的成员函数,用于对象实例化时初始化对象,而不是创建对象空间。特点如下:

  1. 函数名与类名相同

  2. 无返回值(也不要写 void

  3. 对象实例化时自动调用

  4. 可以重载

  5. 若未显式定义,编译器会生成无参默认构造函数

  6. 无参构造、全缺省构造、编译器默认构造,统称为默认构造函数,调用时不传实参即可

  7. 默认构造函数对内置类型不做初始化,对自定义类型成员会调用其默认构造函数

#include <iostream>
using namespace std;

class Date 
{
public:
    // 默认构造函数
    Date(int year = 1900, int month = 1, int day = 1)
    {
        _year = year;
        _month =  month;
        _day = day;
    }

    void print() 
    {
        cout << "Date: " << _year << "-" << _month << "-" << _day << endl;
    }
private:
    int _year,;
    int _month,;
    int _day;
};

int main() {
    Date date1; // 调用默认构造函数
    Date date2(2025, 11, 15); // 使用自定义参数初始化

    date1.print();
    date2.print();
    
    return 0;
}
Date: 1900-1-1
Date: 2025-11-15

在上面的代码中,Date 类的构造函数提供了默认参数值,因此可以在创建对象时不传递任何参数,或者传递自定义的年月日。

3. 析构函数

析构函数用于对象生命周期结束时清理资源,特点如下:

  1. 函数名为 ~类名

  2. 无参数、无返回值

  3. 一个类只能有一个析构函数

  4. 对象生命周期结束时自动调用

  5. 对内置类型成员不做处理,对自定义类型成员会自动调用其析构函数

  6. 若类中没有资源申请,析构函数可以不写

4. 拷贝构造函数

拷贝构造函数是构造函数的特殊形式,用于用一个对象初始化另一个对象。特点:

  1. 构造函数重载的一种

  2. 第一个参数必须是类类型的引用,其他参数需有默认值

  3. 自定义类型对象进行拷贝传参或返回时,会调用拷贝构造

  4. 若未显式定义,编译器会生成默认拷贝构造

    • 内置类型:值拷贝/浅拷贝

    • 自定义类型:调用其拷贝构造

5. 赋值运算符重载

赋值运算符 用于已有对象间的赋值,与拷贝构造不同,它是针对已存在对象。特点:

  1. 必须重载为成员函数

  2. 参数建议写成 const 类类型&

  3. 建议返回 类类型&,支持连续赋值

  4. 编译器默认生成的赋值运算符:

    • 内置类型:值拷贝/浅拷贝

    • 自定义类型:调用其赋值运算符重载

  5. 如果类显式定义了析构函数且释放了资源,通常需要手动实现赋值运算符重载

函数类型作用默认行为是否需自定义
构造函数初始化对象内置类型未初始化,自定义类型调用默认构造必要时使用初始化列表
析构函数清理资源内置类型忽略,自定义类型调用析构有资源时必须自定义
拷贝构造函数用对象初始化另一个对象内置类型浅拷贝,自定义类型调用拷贝构造有指针或资源时需自定义
赋值运算符重载对已存在对象赋值内置类型浅拷贝,自定义类型调用赋值重载有资源时需自定义
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值