C++重载运算符参数问题

lordmr 2009-07-17 09:37:05
  拿双目运算符“+”举例:
  如果不是友元函数的话,一般一个参数就够了,但是我看书上说也可以写两个参数,于是我试着这么写了,

class Complex     //复数加法
{
public:
Complex()
{
real = 0;
imag = 0;
}
Complex(double r, double i)
{
real = r;
imag = i;
}
Complex operator+ (Complex & c1, Complex& c2); //这里写上2个参数,
void display();
private:
double real;
double imag;
};

Complex Complex::operator +(Complex &c1, Complex &c2)
{
Complex c;
c.real = c1.real+c2.real;
c.imag = c1.imag+c2.imag;
return c;
}
但是出错了,说是 error C2804: 二进制“operator +”的参数太多
有试着Complex operator+ (Complex & c1, Complex& c2);改成
Complex operator+ (int a, Complex& c2);
还是同样的错误,参考书上说是可以的,但是这么看的话果然还是不可以写两个参数吧。
还是希望大家给个准确的答案。

还有一个问题,就是“乘法”和“指针”的重载如何区分?
符号都一样,有什么办法区分吗?

...全文
564 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
怪人伽利略 2010-01-02
  • 打赏
  • 举报
回复
学习
scutcsxiao 2009-07-19
  • 打赏
  • 举报
回复
还有一个问题,就是“乘法”和“指针”的重载如何区分?
符号都一样,有什么办法区分吗?


指针不能重载
wanniansong 2009-07-18
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 xylicon 的回复:]
+法运算符是双目运算符,所以不能超过2个参数
Complex operator+ (Complex & c1, Complex& c2);

这里是放在类成员中的运算符重载,所以你要把默认的this指针算上去。这句话对于编译器来说,其实是
Complex operator+ (this, Complex & c1, Complex& c2);

所以正确的写发应该是 Complex operator+ (Complex& c);

或者把运算符重载写成友元函数。放到全局中,那么就可以写成 Complex operator+ (Complex & c1, Complex& c2); 这样了。

[/Quote]

所言极是,如是成员函数 + 的实施者是‘+’左边的实例。
jamesjinyongming 2009-07-17
  • 打赏
  • 举报
回复
看effective C++条款19: 分清成员函数,非成员函数和友元函数
http://www.kuqin.com/effectivec2e/ch05b.htm
pengzhixi 2009-07-17
  • 打赏
  • 举报
回复
用友元得花可以访问类的private成员和protected成员撒
xylicon 2009-07-17
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 lordmr 的回复:]
难道说不是友元的话,就不可以写成2个参数了吗
[/Quote]

也不一定是友元,只要不是类成员函数就行。也可以是全局函数,但不是该类的友元函数。

反正类成员函数就只能是1个参数了。
lordmr 2009-07-17
  • 打赏
  • 举报
回复
难道说不是友元的话,就不可以写成2个参数了吗
xylicon 2009-07-17
  • 打赏
  • 举报
回复
+法运算符是双目运算符,所以不能超过2个参数
Complex operator+ (Complex & c1, Complex& c2);

这里是放在类成员中的运算符重载,所以你要把默认的this指针算上去。这句话对于编译器来说,其实是
Complex operator+ (this, Complex & c1, Complex& c2);

所以正确的写发应该是 Complex operator+ (Complex& c);

或者把运算符重载写成友元函数。放到全局中,那么就可以写成 Complex operator+ (Complex & c1, Complex& c2); 这样了。
pengzhixi 2009-07-17
  • 打赏
  • 举报
回复
定义成友元,如果定义成成员函数的话,编译器自动会添加个 this指针。
friend Complex operator+ (Complex const& c1, Complex const& c2);
参数为const引用好些
pengzhixi 2009-07-17
  • 打赏
  • 举报
回复
friendComplex operator+ (Complex & c1, Complex& c2);

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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