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

C++完整教程

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

构造函数

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

构造函数的特点

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

示例

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#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类中添加析构函数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#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++ 中的资源是至关重要的。

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

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

https://zglg.work/c-plusplus-zero/31/

作者

IT教程网(郭震)

发布于

2024-08-10

更新于

2024-08-24

许可协议

分享转发

交流

更多教程加公众号

更多教程加公众号

加入星球获取PDF

加入星球获取PDF

打卡评论