嘿,我想知道这两个运算符定义之间的区别:
1:
class Rational{
//...
public:
//...
Rational operator -() const{ return Rational(-t,b);}
//...
};
2:
class Rational{
//...
public:
//...
friend Rational operator -(const Rational& v) {return Rational(-t,b);}
//...
};
据我了解,使用:
Rational s = -r
r.operator-() // should happen
希望对差异进行一些解释,谢谢!
答案 0 :(得分:3)
在大多数情况下,它们是相同的。
首先,我认为你没有写得正确。他们应该是:
// Member function. "-r" calls r.operator-()
Rational Rational::operator -() const{ return Rational(-t,b);}
// (technically a) global function. "-r" calls ::operator-(r)
friend Rational operator -(const Rational& v) {return Rational(-v.t,v.b);}
主要区别在于,如果您有另一种类型(比如MyRational
)可以转换为Rational对象,那么:
MyRational mr = MyRational();
Rational r = -mr;
将使用第二个定义,但不适用于第一个定义。