关于C++类的构造函数和析构函数的程序,求大神写出输出结果和给出解释。

#include <iostream.h>
#include <string.h>
class b
{
private:
int data;
public:
b()
{
cout<<"de c"<<endl;
}
~b()
{
cout<<"de"<<endl;
}
b(int i):data(i)
{
cout<<"co b pa"<<data<<endl;
}
};
b play(b c)
{
return c;
}
void main()
{
b temp=play(5);
b d(6);
b e(7);
b f(8);
}
//程序是直接粘出来的,可以直接拿来用。

/** 输出:
co b pa5
de
co b pa6
co b pa7
co b pa8
de
de
de
de
*/
void main()
{
b temp=play(5); /* 为了给temp初始化,执行play(5),参数是一个用5来初始化的b的对象
所以执行有参数的那个构造函数,输出co b pa5,然后返回一个b对象
后,函数执行完成,局部对象销毁,输出de。
初始化temp的是一个拷贝构造函数,你没有实现,编译器给你一个缺省
的拷贝构造函数,不输出 */
b d(6); /* 很明显输出co b pa6 */
b e(7); /* 很明显输出co b pa7 */
b f(8); /* 很明显输出co b pa8 */
/*然后会逆序销毁,销毁这四个b对象,输出4次de */
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-08-20
看看是否明白

class b
{
private:
int data;
public:
b()
{
cout<<"de c"<<endl;
}
~b()
{
cout<<"de"<<endl;
}
b(int i):data(i)
{
cout<<"co b pa"<<data<<endl;
}
};
b play(b c)
{
return c;
}
void main()
{
b temp=play(5); // 首先调用函数play,5强制转换成b类型,调用b的有参构造函数,打印co b pa5,然后将c赋值给temp,由于b类没有定义=,因此调用b类默认拷贝构造函数,最后play参数c被析构,打印de
b d(6); // 调用b类有参构造函数打印co b pa6
b e(7); // 调用b类有参构造函数打印co b pa7
b f(8); // 调用b类有参构造函数打印co b pa8
// 最后4个对象都被析构,调用4次析构函数,打印4次de
}本回答被网友采纳
相似回答