/** 输出:
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 */
}
看看是否明白
class b
{
private:
int data;
public:
b()
{
cout<<"de c"<
~b()
{
cout<<"de"<
b(int i):data(i)
{
cout<<"co b pa"< }
};
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
}