关于重载运算符+的一个有关问题

关于重载运算符+的一个问题
operator   +   ()函数不是可以定义为成员函数也可以定义为友元函数,那两种情况有什么区别?
谢谢!

------解决方案--------------------
假设类BigInt是个大数处理类
BigInt有BigInt(int i)构造函数
BigInt temp;
BigInt temp2 = 2 + temp;
成员函数无法将2隐式转换为BigInt,友元函数则可以

------解决方案--------------------
应该说对成员函数重载+来说,该句子相当于:
BigInt temp2 = 2.operator+(temp);
这是个错误的句子
------解决方案--------------------
作为成员的运算符比起作为非成员的运算符,在声明和定义时,形式上少了一个参数,这是因为c++
对所有的成员函数隐藏了了第一个参数this

同样的,重载后的运算符作为成员函数也比作为友元的函数参数多一个,拿 运算符 + 来说,在成员函数中,它第一个参数是它所属的那个对象,第二个是一个参数,而在友元函数中,两个对象都是参数
声明如下
成员函数版: SomeClass operator + (SomeClass )
友元函数版: friend SomeClass operator +(SomeClass ,SomeClass)
Someclass 为一个类名,假设这两个函数返回的都是 SomeClass 对象.

------解决方案--------------------

成员定义有更多的限制, 因为默认的规格是:
operator+ ( int ) const -----> operator+ ( T const&, int ) const;

而友员就没有那么多限制,可以分别修订两个参数,做一些调整等
operator+ ( T const&, int )
operator+ ( int, T const& )

从重载的角度看, 友员都是比较灵活的.
但是,能用成员还是使用成员比较爽.