挪威富士堡公司:一个C++问题

来源:百度文库 编辑:高考问答 时间:2024/05/05 12:09:03
#include<iostream.h>
class complex
{private:
int r;int i;
public:
complex(int real=0,int image=0);
complex (complex &p);
void putout(complex k);
complex operator+(complex w2);

};
complex::complex(int real, int image)
{r=real;i=image;}

complex complex::operator+(complex w2)
{return(r+w2.r,i+w2.i);}
void complex::putout(complex k)
{if(k.i>0) cout<<k.r<<"+"<<k.i<<"i"<<endl;
else cout<<k.r<<k.i<<"i"<<endl;
}
complex::complex(complex &p)
{r=p.r;i=p.i;}
void main()
{complex x1(5,3);
complex x2(1,1);
complex x3;
x3=x1+x2;
x3.putout(x3);
}
要实现复数相加,却得不到预期的结果,还请高人解释一下!!~~~

同意楼上,同时建议将返回类型改为引用,避免返回时的值拷贝,节省时间。
另外,建议将operator+的参数改为引用,避免值传递过程,节省时间。(这又不是C,虽然计算机计算速度很快,不过略去这些操作在大量计算时速度会明显快一些,既然你是写class,应该考虑重用啊)

{return(r+w2.r,i+w2.i);}这句改成
return(complex(r+w2.r,w2.i))试试
运算完后要调用构造函数的:)

你的那个输出要改为
void complex::putout(void)
{
if(i>0)
cout<<r<<"+"<<i<<"i"<<endl;
else
cout<<r<<"-"<<i<<"i"<<endl;
}
{return(r+w2.r,i+w2.i);}这句改成
return(complex(r+w2.r,w2.i))