析构函数
每个类都有一个析构函数,当对象销毁时自动调用。
析构函数与构造函数相对。创建一个对象时,构造函数被调用,而销毁一个对象时,析构函数被调用。
当程序员没有显式地写一个析构函数时, 编译器会为每个类定义一个缺省的析构函数。
析构函数的名字与构造函数一样,只是在前面加了一个~
看下面的例子:
Circle.h
class Circle { public: //无参构造函数 Circle(); //有参构造函数 Circle(double); //析构函数 ~Circle(); //获取圆的面积 double getArea(); private: //圆的半径 double radius; //定义常量圆周率 const double PI = 3.14159; //对象个数 static int objectNumber; };
Circle.cpp
#include "Circle.h" #include <iostream> using namespace std; int Circle::objectNumber = 0; //无参构造函数 Circle::Circle() { this->radius = 1; objectNumber++; cout << "当前对象的个数是" << objectNumber << endl; } //有参构造函数 Circle::Circle(double radius) { this->radius = radius; objectNumber++; cout << "当前对象的个数是" << objectNumber << endl; } //析构函数 Circle::~Circle(){ objectNumber--; cout << "当前对象的个数是" << objectNumber << endl; } //获取面积 double Circle::getArea() { return radius*radius*PI; }
main.cpp
#include <iostream> #include "Circle.h" using namespace std; int main() { //调用无参构造函数 cout << "创建对象p1" << endl; Circle* p1 = new Circle; //调用有参构造函数,参数为1 cout << "创建对象p2" << endl; Circle* p2 = new Circle(1); //调用有参构造函数,参数为3 cout << "创建对象p3" << endl; Circle* p3 = new Circle(3); //销毁p1 cout << "销毁对象p1" << endl; delete p1; //销毁p2 cout << "销毁对象p2" << endl; delete p2; //销毁p3 cout << "销毁对象p3" << endl; delete p3; return 0; }
运行结果: