有关c++声明类的对象问题。急!

来源:百度知道 编辑:UC知道 时间:2024/09/21 03:22:47
看下面的函数:
#include "iostream.h"
class CTime
{
private: //私有类成员。只允许本类成员和函数调用和使用。
int hour;
int minute;
int second;
public: //公共类成员。允许其他类调用和使用本类中的成员和函数。
CTime(int,int,int); //构造函数和析构函数都不能指定函数类型,如void...
~ CTime();
}; //类和结构体一样在最后面都要加";"。
CTime::CTime(int h,int m,int s) //对构造函数定义。
{
hour = h;
minute = m;
second = s;
}
CTime::~CTime()
{
cout<<hour<<':'<<minute<<':'<<second<<endl; //显示时间变量。
}
void main()
{
CTime OldTime(9,3,40); //为CTime类创建并定义一个类变量(我的理解)。
OldTime.~CTime(); //显示时间。
CTime NowTime(12,34,23);
NowTime.~CTime();
}
结果为:
9:3:40 //OldTime
12:34:23 //NowTime
12:34:23 //NowTime
9:3:40 //OldTime

1: 析构函数~CTime不是拿来手动调用的, 是由对象销毁前系统自动调用的函数
2: 上述代码中对象在堆栈中构造,所以先构造的对象后销毁,所以执行的步骤为:
-> 构造OldTime
-> 手动调用OldTime.~CTime()
-> 构造NowTime
-> 手动调用的析构函数~CTime()
-> 先销毁NowTime,系统调用一次其析构函数~CTime()
-> 后销毁OldTime,系统调用一次其析构函数~CTime()
所以是4个输出,全是在析构函数之中进行的,而你手动调用析构函数是错误的做法

。。在对象销毁前会调用析构函数,前面两个输出是你显式调用析构函数输出的,但调用了并不代表对象已经销毁了,这两个对象的生命周期是整个程序结束后,才会被销毁,所以在程序结束前会自动调用析构函数,至于为什么会反过来,这还是概念问题了,“先构造的对象后析构,后构造的对象先析构”