C++加号重载问题

会打代码的扫地王大爷 2014-05-17 08:23:55
#include <iostream.h>
#include <math.h>
class Complex
{
public:
Complex(double r=0,double i=0)
{
real=r;imag=i;
}
Complex operator+(double &, Complex &); //实数+复数
void display( );
double abscomp() ;
private:
double real, imag;
};
void Complex::display( )
{
cout <<"(" <<real <<"+" <<imag <<"i)" <<endl;
}
double Complex::abscomp()
{
return sqrt(real*real+imag*imag);
}

Complex Complex::operator+(double &c1, Complex &c2)
{
Complex c;
c.real=c1+c2.real;
c.imag=c2.imag;
return c;
}
int main( )
{
double x, y;
Complex comp1(x,y),comp3;
cin>>x>>y;
comp3=x+comp1;
comp3.display( );
return 0;
}
为什么不能这样子重载
...全文
262 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
漂浮一生 2014-05-18
  • 打赏
  • 举报
回复
引用 5 楼 wlmnzf 的回复:
必须左边是对象吗,如果左边必须是数字,该怎么写
那重载为友元函数就行了,
friend Complex operator+(const double &r, const Complex &c1);   

Complex operator+(const double &r, const Complex &c1)
{
	Complex c;

	c.real = r + c1.real;
	c.imag = c1.imag;

	return c;
}
lm_whales 2014-05-18
  • 打赏
  • 举报
回复
如果允许,隐式类型转换,那么可以,仅仅定义一个双复数参数,用于复数相加。 其他两个让编译器通过隐式类型转换,实数实参,跟复数形参匹配,从而可以不去定义。
lm_whales 2014-05-18
  • 打赏
  • 举报
回复
引用 6 楼 wlmnzf 的回复:
引用 2 楼 lm_whales 的回复:
你需要三个operator +
为什么
因为,参数类型有三种不同排列组合 1)双复数参数,用于复数相加 2)左实右复参数,用于实数和复数相加 3)左复右实参数,用于复数和实数相加
  • 打赏
  • 举报
回复
引用 2 楼 lm_whales 的回复:
你需要三个operator +
为什么
  • 打赏
  • 举报
回复
必须左边是对象吗,如果左边必须是数字,该怎么写
  • 打赏
  • 举报
回复
引用 3 楼 zhangyonghui2117 的回复:
你的函数不对,改成下面这样的: Complex Complex::operator+(Complex & comp){ return Complex(real+comp.real,imag+comp.imag) }
跟我那样子有什么区别吗,我无非就是先创建了一个对象,然后再加法操作,你是先加法操作,再返回构造函数初始化的对象
「已注销」 2014-05-17
  • 打赏
  • 举报
回复
你的函数不对,改成下面这样的: Complex Complex::operator+(Complex & comp){ return Complex(real+comp.real,imag+comp.imag) }
lm_whales 2014-05-17
  • 打赏
  • 举报
回复
你需要三个operator +
Morrisss_ 2014-05-17
  • 打赏
  • 举报
回复
既然你的+重载是成员函数,那必然+的左边的操作数就是调用对象本身。参数列表就只应该有一个参数。

65,208

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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