奇怪的事,高手看过来!!!

shiluoye 2003-06-12 09:36:50
下面这段代码很简单啊但是结果好奇怪,出现四次构造函数却出现五次析构函数!!!
请高手帮忙看看啊!!!!!




#include<iostream.h>

class complex
{
float real;
float image;
public:
complex(float r=0,float i=0)
{real=r;image=i;cout<<"calling constructor..."<<endl;}
~complex()
{cout<<"calling disconstructor..."<<endl;}
void show()
{cout<<"real:"<<real<<" "<<"image:"<<image<<endl;}
complex operator+(complex&c)
{
complex t;
t.real=real+c.real;
t.image=image+c.image;
return t;
}
};
void main()
{
complex c1(1,1);
c1.show();
complex c2;
c2.show();
c2=c1+(complex)3;
c2.show();

}
...全文
39 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
shiluoye 2003-06-12
  • 打赏
  • 举报
回复
恩,我已经试出正确结果了,谢谢楼上的:)
晨星 2003-06-12
  • 打赏
  • 举报
回复
不行不行,!!!!!!!!!!!!!!!!!!!!!!!!1
那样还是看不到,这样:
complex::complex(const complex& c)
{
cout << "Calling copy contructor..." << endl;
real = c.real;
image = c.image;
}
晨星 2003-06-12
  • 打赏
  • 举报
回复
楼上说得对,你自己没写拷贝构造函数,所以有一次“地下”进行的构造你没看到。^o^

帮你些个拷贝构造函数吧(只提供定义且没调试过),
complex::complex(const complex& c)
{
real = c.real;
image = c.image;
}

shiluoye 2003-06-12
  • 打赏
  • 举报
回复
啊csdn真是温暖的地方啊!!!
问题解决了,谢谢大家!!!
snipersu 2003-06-12
  • 打赏
  • 举报
回复
你提供一个拷贝构造看看!
complex c1(1,1);
//1constructor
complex c2;
//1constructor
c2=c1+(complex)3;
//3 constructor:1个是(complex)3的,一个是operator+用到的t的,还有一个是=产生(他用了拷贝构造编译器产生的,所以没有信息显示,但destructor是你提供的,所以有信息显示,你可以提供一个copyconstructor来看看).
Lymtics 2003-06-12
  • 打赏
  • 举报
回复
没算拷贝构造
shiluoye 2003-06-12
  • 打赏
  • 举报
回复
??只要是构造函数我都让显示了啊!
lu_yb 2003-06-12
  • 打赏
  • 举报
回复
你算上拷贝构造了么?

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧