C++对象和特性——构造函数和析构函数(一)语法、定义以及简单调用
前言
首先我们要知道对象的初始化和清理也是非常重要的安全问题。
- 1.一个对象或变量如果没有初始状态,那么对其使用后果是未知的
- 2.使用完一个对象或变量,如果没有及时清理也会造成一定的安全问题
在C++中利用构造函数和析构函数很好的解决了上述问题。这两个函数将被编译器自动调用,完成对象的初始化和清理工作。即使我们没有提供构造函数和析构函数,编译器也会自动提供这两个函数。编译器提供的构造函数和析构函数是空实现
构造函数
定义:
- 主要用于在创建对象时,为对象的成员属性赋值 ,构造函数由编译器自动调 用,无须手动调用
语法:
- 类名(){}
- 没有返回值,同时也不写void
- 函数名与类名相同
- 可以有参数,可以发生重载
- 程序在调用对象时会自动调用构造,且只会调用一次,无须手动调用。
创建构造函数:
class Person
{
public:
//创建构造函数,函数名与类名相同
Person()
{
cout<<"构造函数调用"<<endl;
}
}
析构函数
定义:
- 主要用于在对象销毁前自动调用,执行一些清理工作。
语法:
- ~类名(){}
- 没有返回值,同时不写void
- 函数名与类名相同,在类名前加~
- 不能有参数,因此也不能发生重载
- 程序在对象销毁之前自动调用,且只会调用一次
创建析构函数:
class Person
{
public:
//创建构造函数,函数名与类名相同
Person()
{
cout<<"构造函数调用"<<endl;
}
//创建析构函数,函数名与类名相同 析构函数无参数
~Person()
{
cout<<"析构函数调用"<<endl;
}
}
调用函数:
在局部函数内创建P1对象:
#include<iostream>
using namespace std;
class Person
{
public:
//创建构造函数,函数名与类名相同
Person()
{
cout<<"构造函数调用"<<endl;
}
//创建析构函数,函数名与类名相同 析构函数无参数
~Person()
{
cout<<"析构函数调用"<<endl;
}
};
//创建局部函数test
void test()
{
Person P1;//局部变量,创建在栈上的数据,函数执行完毕后立马释放这个对象
}
int main()
{
test();
return 0;
}
在main函数内创建P1对象:
#include<iostream>
using namespace std;
class Person
{
public:
//创建构造函数,函数名与类名相同
Person()
{
cout<<"构造函数调用"<<endl;
}
//创建析构函数,函数名与类名相同 析构函数无参数
~Person()
{
cout<<"析构函数调用"<<endl;
}
};
//创建局部函数test
/*void test()
{
Person P1;//局部变量,创建在栈上的数据,函数执行完毕后立马释放这个对象
}*/
int main()
{
// test();
Person P1;
system("pause");
return 0;
}
部分软件在运行第二种时,按下任意键后控制台迅速关闭,析构函数的调用一闪而逝,并非未进行析构函数的调用。
析构函数的调用是在函数结束后,进行清理工作。
如果感觉对您有用请点赞,收藏,转发让更多人看到。