C++ 类之构造函数

C++ 类之构造函数

在C++中,构造函数是用于初始化对象的特殊成员函数。构造函数有多种类型,包括默认构造函数、参数化构造函数、拷贝构造函数和移动构造函数。以下是对这些构造函数的详细总结和解释。

1. 默认构造函数

默认构造函数是在没有参数的情况下创建对象时调用的构造函数。如果没有显式定义,编译器会生成一个默认构造函数。

示例

1
2
3
4
5
6
class MyClass {
public:
MyClass() {
// 默认构造函数
}
};

2. 参数化构造函数

参数化构造函数允许在创建对象时传递参数,以初始化对象的成员变量。

示例

1
2
3
4
5
6
7
8
9
10
class MyClass {
public:
MyClass(int x, double y) : a(x), b(y) {
// 参数化构造函数
}

private:
int a;
double b;
};

3. 拷贝构造函数

拷贝构造函数用于通过另一个同类型的对象来初始化新对象。它通常用于复制对象的资源。

示例

1
2
3
4
5
6
7
8
9
10
class MyClass {
public:
MyClass(const MyClass& other) : a(other.a), b(other.b) {
// 拷贝构造函数
}

private:
int a;
double b;
};

4. 移动构造函数

移动构造函数用于通过移动另一个同类型的对象来初始化新对象。它通常用于转移对象的资源,而不是复制它们。

示例

1
2
3
4
5
6
7
8
9
10
11
12
class MyClass {
public:
MyClass(MyClass&& other) noexcept : a(other.a), b(other.b) {
other.a = 0;
other.b = 0.0;
// 移动构造函数
}

private:
int a;
double b;
};

5. 析构函数

析构函数用于在对象生命周期结束时清理资源。它的名称与类名相同,但前面有一个波浪号(~)。

示例

1
2
3
4
5
6
class MyClass {
public:
~MyClass() {
// 析构函数
}
};

6. 完整示例

以下是一个包含所有类型构造函数和析构函数的完整示例:

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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#include <iostream>
#include <utility> // for std::move

class MyClass {
public:
// 默认构造函数
MyClass() : a(0), b(0.0) {
std::cout << "Default constructor" << std::endl;
}

// 参数化构造函数
MyClass(int x, double y) : a(x), b(y) {
std::cout << "Parameterized constructor" << std::endl;
}

// 拷贝构造函数
MyClass(const MyClass& other) : a(other.a), b(other.b) {
std::cout << "Copy constructor" << std::endl;
}

// 移动构造函数
MyClass(MyClass&& other) noexcept : a(other.a), b(other.b) {
other.a = 0;
other.b = 0.0;
std::cout << "Move constructor" << std::endl;
}

// 析构函数
~MyClass() {
std::cout << "Destructor" << std::endl;
}

// 打印数据
void print() const {
std::cout << "a: " << a << ", b: " << b << std::endl;
}

private:
int a;
double b;
};

int main() {
MyClass obj1; // 调用默认构造函数
MyClass obj2(10, 20.5); // 调用参数化构造函数
MyClass obj3 = obj2; // 调用拷贝构造函数
MyClass obj4 = std::move(obj2); // 调用移动构造函数

obj1.print();
obj2.print(); // 被移动后,obj2 的值被重置
obj3.print();
obj4.print();

return 0;
}

输出

1
2
3
4
5
6
7
8
9
10
11
12
Default constructor
Parameterized constructor
Copy constructor
Move constructor
a: 0, b: 0
a: 0, b: 0
a: 10, b: 20.5
a: 10, b: 20.5
Destructor
Destructor
Destructor
Destructor

总结

  • 默认构造函数:在没有参数的情况下创建对象时调用。
  • 参数化构造函数:允许在创建对象时传递参数,以初始化对象的成员变量。
  • 拷贝构造函数:通过另一个同类型的对象来初始化新对象,通常用于复制对象的资源。
  • 移动构造函数:通过移动另一个同类型的对象来初始化新对象,通常用于转移对象的资源。
  • 析构函数:在对象生命周期结束时清理资源。

C++ 类之构造函数
https://linhanmic.github.io/2023/10/06/C++ 类之构造函数/
作者
Linhanmic
发布于
2023年10月6日
更新于
2024年9月13日
许可协议