跳转到主要内容
模块 4 · 第 2 课(共 2)课程中的10/18~12 min
模块课程(2/2)

构造函数和析构函数

构造函数和析构函数是管理对象生命周期的特殊成员函数:它们的创建(初始化)和销毁(资源清理)。

构造函数

当在内存中创建该类的对象时,会自动调用 构造函数。

  • 它与类具有相同的名称。
  • 它没有返回类型(甚至没有 void)。
  • 它可以重载以接受不同的参数集。
C++
#include <iostream>
#include <string>

class Item {
private:
    std::string name;
    double price;

public:
    // Parameterized constructor
    Item(std::string itemName, double itemPrice) {
        name = itemName;
        price = itemPrice;
        std::cout << "Object " << name << " created." << std::endl;
    }

    void display() {
        std::cout << name << ": " << price << " EUR" << std::endl;
    }
};

int main() {
    // Implicit call to the constructor passing parameters
    Item book("Libro C++", 29.99);
    book.display();
    return 0;
}

默认构造函数

如果没有定义任何构造函数,C++编译器会生成一个不带参数的默认构造函数。但是,如果您编写带参数的自定义构造函数,编译器将不再自动生成默认构造函数,因此您需要在需要时显式定义它:

C++
class Point {
public:
    int x;
    int y;

    // Explicit default constructor
    Point() {
        x = 0;
        y = 0;
    }
};

析构函数

当对象超出范围或从内存中显式删除时,会自动调用 析构函数。

  • 它与 ** 与前面带有波形符 ~** 的类同名(例如 ~Item())。
  • 它不接受参数并且没有返回类型。
  • 它用于释放资源(例如,关闭文件、释放动态分配的内存)。
C++
class ResourceManager {
public:
    ~ResourceManager() {
        // Cleanup code
        std::cout << "Resources released." << std::endl;
    }
};

自己尝试一下

锻炼#cpp.m4.l2.e1
尝试:0加载中...

使用私有成员 std::string username 定义一个名为 User 的类。添加一个接受字符串 (User(std::string name)) 并使用它来初始化用户名的公共构造函数。添加一个返回用户名的公共 getter std::string getUsername() 。在 main 中,创建一个传递“Alice”作为名称的 User 对象,并使用 std::cout 打印其用户名。

正在加载编辑器...
显示提示

构造函数与类具有相同的名称,并且没有指定任何返回类型,甚至没有指定“void”。

3 次尝试后可用的解决方案

锻炼#cpp.m4.l2.e2
尝试:0加载中...

定义一个名为 Point 的类,它具有两个公共整数成员:x 和 y。添加一个默认构造函数(无参数),将 x 和 y 初始化为 0。在 main 中,使用默认构造函数创建一个 Point 对象并打印 x 和 y。

正在加载编辑器...
显示提示

默认构造函数不带参数:`Point() { x = 0; y = 0; }`。

3 次尝试后可用的解决方案