这个“析构函数”和“构造函数”怎么回事呢?

来源:百度知道 编辑:UC知道 时间:2024/05/21 20:38:49
源程序如下,运行后输出结果是“One turn of”。为什么我没有调用它也会输出呢?
#include "iostream.h"
#include "process.h"

class example
{
int i,j;
public:
char str[100];
example() {cout<<"One turn of"<<endl;}
~example() {cout<<"Two turn of"<<endl;}
void pritout();
}eA;

void main(void)
{
system("pause");
return ;
}

打印了One turn of的原因:
你在定义example类时同时的尾加了eA,这样会声明一个example类的对象eA,并且系统会自动调用eA的构造函数example(),于是打印了One turn of.

没有打印Two turn of的原因:
你在主函数main()外声明了对象eA,这样eA会成为一个全局对象.全局对象在主函数main()结束后析放,并且调用析构函数~example().这时主函数main()已经结束了不能打印Two turn of.

这里其实只是打印两句话,没什么别的意义,而你在这里声明了一个全局对象eA,现在我们讨论它的执行顺序,在产生一个对象前,就要执行该对象的构造函数,并且全局对象在main函数前面声明,所以构造函数也先于主函数执行,于是就打印了One turn of,而后进入了主函数,由于你给了系统暂停指令,显然该程序没有结束,更重要的是它没有退出主函数,而由于全局对象的析构函数是在程序推出前最后执行的,所以Two turn of就打印不了了
希望你能明白!