封构造函数和析构函数

  • c++中的面向对象来源于生活,每个对象都有初始设置和对象销毁前清理数据的设置。
  • 对象的初始化和清理也是一个很重要的问题,一个对象或者变量没有初始状态,也不及时清理,会造成一定的安全问题。
  • c++利用构造函数和析构函数解决了上述问题,这两个函数将会被编译器自动调用,完成对象初始化和清理工作,这是编译器强制做的事情,因此如果程序员不提供构造函数和析构函数,那么编译器提供的这两个函数是空实现。

1. 构造函数

  • 主要作用在于创建对象是为对象的成员属性赋值,构造函数由编译器自动调用,无需手动调用。

  • 语法:类名(){}

    (1)构造函数,没有返回值

    (2)函数名和类名相同

    (3)构造函数可以有参数,因此可以发生重载

    (4)程序在调用对象时自动调用,而且只调用一次

2. 析构函数

  • 主要作用在于对象销毁前系统自动调用执行一些清理工作。

  • 语法: ~类名(){}

    (1)没有返回值

    (2)函数名和类名相同,在名称前面加上符号~

    (3)析构函数不可以有参数,因此不可以发生重载

    (4)程序在对象销毁前会自动调用析构,而且值调用一次

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include<iostream>
using namespace std;
class Person {
public:
Person() {
cout << "Person 的构造函数的调用" << endl;
}
~Person() {
cout << "Person 的析构函数的调用" << endl;
}
};
void test01() {
Person p;//栈上的数据,test01执行完后,释放这个对象
}
int main() {
test01();
cout << "退出 test01" << endl;
Person p;//自动调用一次构造函数
system("pause");
//执行完main才会调用析构函数
return 0;
}

运行结果:

1
2
3
4
5
6
Person 的构造函数的调用
Person 的析构函数的调用
退出 test01
Person 的构造函数的调用
请按任意键继续. . .
Person 的析构函数的调用