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

2026-08-15 18:17:50 | 世界杯足球价格

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

构造函数

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

构造函数的特点

名称:与类名相同。

无返回值:构造函数不能有返回值。

自动调用:无须手动调用,创建对象时自动执行。

重载:可以有多个构造函数,支持不同的参数列表。

示例

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

#include

#include

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对象,分别使用不同的构造函数来初始化它们的属性。

析构函数

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

析构函数的特点

名称:与类名相同,但前面有~。

无返回值:析构函数没有返回值。

自动调用:对象生命周期结束时自动调用。

不重载:只能有一个析构函数。

示例

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

#include

#include

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++ 中的资源是至关重要的。

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