Jupyter AI

31 结构体与类之构造函数与析构函数

📅 发表日期: 2024年8月10日

分类: 💻C++ 入门

👁️阅读: --

C++完整教程

在上一篇内容中,我们学习了结构体与类的基本概念,包括它们的定义与使用方法。这一篇,我们将深入探讨构造函数析构函数的概念,以及它们在 C++ 中如何使用。构造函数和析构函数是面向对象编程中重要的组成部分,它们涉及到对象的生命周期。

构造函数

构造函数是一个特殊的成员函数,用于初始化对象的状态。构造函数的名称与类名相同,并且没有返回值,即使是void也不需要。可以有多个构造函数通过不同的参数列表实现重载。

构造函数的特点

  1. 名称:与类名相同。
  2. 无返回值:构造函数不能有返回值。
  3. 自动调用:无须手动调用,创建对象时自动执行。
  4. 重载:可以有多个构造函数,支持不同的参数列表。

示例

下面是一个简单的Person类的定义,包含构造函数:

#include <iostream>
#include <string>

class Person {
private:
    std::string name;
    int age;

public:
    // 默认构造函数
    Person() {
        name = "小白";
        age = 18;
    }

    // 带参数的构造函数
    Person(std::string n, int a) {
        name = n;
        age = a;
    }

    // 打印信息
    void display() {
        std::cout << "姓名: " << name << ", 年龄: " << age << std::endl;
    }
};

int main() {
    Person person1; // 调用默认构造函数
    person1.display();

    Person person2("小红", 25); // 调用带参数的构造函数
    person2.display();

    return 0;
}

在这个示例中,Person类定义了一个默认构造函数和一个带参数的构造函数。在main函数中,我们创建了两个Person对象,分别使用不同的构造函数来初始化它们的属性。

析构函数

析构函数是一个特殊的成员函数,用于清理对象占用的资源(例如内存、文件句柄等)。与构造函数类似,析构函数的名称与类名相同,但在名称前加上~符号,并且无参数且无返回值。

析构函数的特点

  1. 名称:与类名相同,但前面有~
  2. 无返回值:析构函数没有返回值。
  3. 自动调用:对象生命周期结束时自动调用。
  4. 不重载:只能有一个析构函数。

示例

下面是一个示例,演示了Person类中添加析构函数:

#include <iostream>
#include <string>

class Person {
private:
    std::string name;
    int age;

public:
    // 构造函数
    Person(std::string n, int a) {
        name = n;
        age = a;
        std::cout << "构造函数被调用: " << name << std::endl;
    }

    // 析构函数
    ~Person() {
        std::cout << "析构函数被调用: " << name << std::endl;
    }

    void display() {
        std::cout << "姓名: " << name << ", 年龄: " << age << std::endl;
    }
};

int main() {
    {
        Person person("小红", 25);
        person.display();
    } // person 在这里超出范围,析构函数将被调用

    return 0;
}

在这个示例中,每当创建一个Person对象时,构造函数被调用并输出一条信息。当person对象的生命周期结束时,析构函数被自动调用,输出另一条信息。这清楚地表明了对象的创建和结束。

小结

在这一节中,我们学习了构造函数析构函数的基本概念和使用方法。构造函数用于对象初始化,而析构函数则用于进行清理工作。理解这两个函数对于管理 C++ 中的资源是至关重要的。

在下面的部分,我们将进入到更复杂的主题,即文件操作,包括如何进行文件的读取与写入,这将为我们在编程中如何利用文件资源开辟新的视角。

💻C++ 入门 (滚动鼠标查看)