202132124089
析构函数的运行顺序:
构造函数:先调用基类的构造函数,再调用子类的构造函数。
析构函数:先调用子类的析构函数,再调用基类的析构函数。自下而上调用,所以先构 造的函数后析构,后构造的函数先析构。相当于一个栈,先进后出。与构造函数调用顺序正好相反。
- 执行自身的析构函数;
- 执行成员变量的析构函数;
- 执行父类的析构函数
从main函数开始执行,到定义的x对象时调用一次不含参Coordinate()构造函数,然后调用 用户自定义输入函数,最后在main函数中调用函数后调用析构函数。
#include<iostream> using namespace std; class Coordinate { public: Coordinate() { times = 2; cout << "Coordinate construction1 called!" << endl; } Coordinate(int times1) { times = times1; cout << "Coordinate construction2 called!" << endl; } ~Coordinate() { cout << "Coordinate construction called!" << endl; } void inputCoord() { for (int i = 0; i < times; i++) { cout << "Please input x:" << endl; cin >> Coord[i][1]; cout << "Please input y:" << endl; cin >> Coord[i][2]; } } void ShowCoord() { cout << "The coord is:" << endl; for (int i = 0; i < times; i++) { cout << "(" << Coord[i][1] << "," << Coord[i][2] << ")" << endl; } } void ShowAvgCoord() { float avgx = 0; float avgy = 0; for (int i = 0; i < times; i++) { avgx = avgx + Coord[i][1]; avgy = avgy + Coord[i][2]; } avgx = avgx / times; avgy = avgy / times; cout << "The AVG coord is:" << endl; cout << "(" << avgx << "," << avgy << ")" << endl; } private: float Coord[100][100]; int times; }; int main() { /*Coordinate x; return 0;*/ Coordinate y(5); y.InputCoord(); y.ShowCoord(); y.ShowAvgCoord(); return 0; }
加入新代码后的运行结果:
在加了代码之后,y (5)调用构造函数Coordinate(int times1),用户自定义函数调用后在return语句调用析构函数。因此times被赋值为5,所以含有五组坐标,输入5组数据后求出平均。