0

ねえ、私はこれらの2つの演算子定義の違いを知りたいです:

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;

2番目の定義では機能しますが、最初の定義では機能しません。

于 2010-09-30T18:08:49.393 に答える