+ -
当前位置:首页 → 问答吧 → 运算符重载困惑!

运算符重载困惑!

时间:2010-07-08

来源:互联网

刚学的C++。
书上有这么一块内容:
class complex
{public:
  complex operator+(int &i,complex &c1);
  complex operator+(complex &c1,int &i);
  private:
  ......
};

说两个运算符重载函数不能都是成员函数,
我想问为什么?看不懂,书上也没说原因!

作者: shaohui973   发布时间: 2010-07-08

成员函数默认类是运算符的左操作数,如果类不是操作符的左操作数,就不能用成员函数。

作者: starwing83   发布时间: 2010-07-08



QUOTE:
成员函数默认类是运算符的左操作数,如果类不是操作符的左操作数,就不能用成员函数。
starwing83 发表于 2010-07-08 11:50




    那complex operator(int &i,complex &b)只能作友元函数声明?

作者: shaohui973   发布时间: 2010-07-08

complex a = ……
complex b = 1 + a; 这样可以么

作者: bruceteen   发布时间: 2010-07-08



QUOTE:
complex a = ……
complex b = 1 + a; 这样可以么
bruceteen 发表于 2010-07-08 15:41




    什么意思?看不懂

作者: shaohui973   发布时间: 2010-07-08

友元函数“complex operator+(complex &c1,int &i)”可以改写为成员函数“complex operator+(int &i)”
但“complex operator+(int &i,complex &c1)”就没办法了
为了一致性,全写成友元是比较通用的做法

作者: tyc611   发布时间: 2010-07-08