析构函数
析构函数完成对象被删除前的一些清理工作,如释放由构造函数分配的内存等。
在对象生存期结束之前系统可以自动调用它。如果程序中未声明析构函数,编译器将产生一个默认的析构函数。析构函数本身并不实际删除对象。
析构函数与类同名,之前冠以’~',以区别于构造函数。析构函数必须是公有函数,且不能指定返回类型,也不能指定参数。
/*析构函数举例*/
#include <iostream>
using namespace std;
class Point{
public:
Point(); //缺省样式的构造函数
Point(int X,int Y); //带参数的构造函数
~Point();//析构函数
void setPoint(int initX,int initY);//设置点坐标
int getX();
int getY();
void setX(int X);
void setY(int Y);
private:
int x,y;
};
Point::Point(){
x = 0;
y = 0;
cout<<"缺省样式的构造函数调用完毕!"<<endl;
}
Point::Point(int X,int Y){
x = X;
y = Y;
cout<<"带参构造函数调用完毕!"<<endl;
}
Point::~Point(){
cout<<"点("<<x<<','<<y<<")析构函数调用完毕"<<endl;
}
void Point::setPoint(int X,int Y){
x = X;
y = Y;
}
int Point::getX(){
return x;
}
int Point::getY(){
return y;
}
void Point::setX(int X){
x = X;
}
void Point::setY(int Y){
y = Y;
}
int main(void)
{
Point p1,p2(0,0);
cout<<"p1的坐标:"<<p1.getX()<<','<<p1.getY()<<endl;
cout<<"p2的坐标:"<<p2.getX()<<','<<p2.getY()<<endl;
p1.setPoint(30,50);
p2.setX(10);
p2.setY(20);
cout<<"p1的坐标:"<<p1.getX()<<','<<p1.getY()<<endl;
cout<<"p2的坐标:"<<p2.getX()<<','<<p2.getY()<<endl;
return 0;
}
运行结果如下:
从运行结果可以看出,析构函数是在对象即将销毁前自动执行的,其执行顺序与构造函数执行顺序相反。