一开始有基础设置,后面不用了要清理,如果没有这两个步骤,后续会出现许多的安全问题,若不写,那么编译器也会提供他们的空实现。
编译器自动调用
一、构造函数(创建对象时,对对象的成员属性进行赋值操作)
1、语法:类名(){}
无返回类型
函数名与类型相同
可含参数,会发生函数重载
程序在创建对象时自动调用,只调用一次
#include<iostream>
using namespace std;
//类与对象:构造函数(创建对象时自动调用,并对类中成员属性初始化,进行赋值操作)
class person
{
public:
person()
{
cout << "创建对象时编译器自动调用构造函数,构造函数的作用是进行初始化!" << endl;
}
};
void test01()
{
person p1;
}
int main()
{
test01();
system("pause");
return 0;
}
二、析构函数(对象销毁前,系统自动调用,只调用一次)
1、语法:~类名(){}
除了不可含参数,不能发生函数重载,其它的与上面一样
#include<iostream>
using namespace std;
//类与对象:构造函数(创建对象时自动调用,并对类中成员属性初始化,进行赋值操作)
///类与对象:析构函数(系统自动调用,进行清理操作,只会调用一次)
class person
{
public:
//1、构造函数
person()
{
cout << "创建对象时编译器自动调用构造函数,构造函数的作用是进行初始化!" << endl;
}
//2、析构函数
~person()
{
cout << "销毁对象前系统自动调用析构函数,析构函数的作用是进行清理操作!" << endl;
}
};
//void test01()
//{
//person p1;//在栈上的数据,test01执行完毕后就会释放这个对象
//}
int main()
{
//test01();
//在main 函数中创建对象,会发现只调用构造,不调用析构(这里联系到,内存管理,虽然在栈区,由于在main函数中,本质会释放内存,但是生命周期和系统一致)
person p1;
system("pause");
return 0;
}