2017-03-16 14 views
0

プログラミング言語がそうすることができるなら、私は常に演算子をオーバーロードしなければならないのですか、それともメンバー関数を作成する方が良いでしょうか?例えばメンバー関数vs演算子オーバーロード

bool operator ==(...) {...} または bool equals(...){...}

+1

"常に"ここで答えてください。過負荷運転者が直感的であれば、一般的には良い過負荷とみなされます – user

答えて

3

オペレータは、関数の意味に直接マップされている場合、演算子を使用することをお勧めします、例えば

  • ==代わりのequalsそれは例えばを追加するなら、それは平等、
  • +の代わりaddを比較するため、
  • addの代わりに+ではなく、+となります。リストに追加する。
1

それが何であるかは絶対に明白な場合にのみ行います。オーバーロードを避けるためにコードを読む方が良いです。あなたの脳は言葉を読むのに使われています。そして時には事業者はあなたが推測するものとは異なる何かをすることができます。でも、私は==が十分にクリアだということです。

オペレータは、いくつかのライブラリでコールバックとして使用されている場合は、使用するとよいでしょう。例えばstd::sort。使用するoperator <を定義することができ、オブジェクトのソート方法を定義します。 非メンバー演算子==メンバ演算子の==またはのいくつかの種類の主な違いは、私の心に来る方法を、等しい

、されています。ただ、他の回答に加えて

2

クラス/構造体のオブジェクトを比較する際に暗黙的な変換を使用する機会です。だから、

、あなたには、いくつかの構造X持っている場合:

struct X { 
    X() = default; 
    X(int) {} 
}; 

をあなたはXため非メンバ演算子の==を定義できます。その後、

bool operator==(const X&, const X&) { 
    // some logic here 
} 

そして、暗黙の型変換を利用します。

X x; 
std::cout << (42 == x) << " " << (x == 42) << std::endl; 
関連する問題