0

嘿,我想知道这两个运算符定义之间的区别:

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

希望对差异进行一些解释,谢谢!

4

1 回答 1

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;

将适用于第二个定义,但不适用于第一个。

于 2010-09-30T18:08:49.393 回答