2011-01-03 11 views
0

比較演算子(< =、>、==など)は通常、基本演算子として実装します。残りの比較演算子を実装したり、クラス間ですべての比較を行うことができます。オーバーロードする必要のある最小限の演算子は何ですか?

+1

演算子のオーバーロードに関するよくある質問(http://stackoverflow.com/questions/4421706/operator-overloading/4421719#4421719)をご覧になることをお勧めします。 –

答えて

7

あなたは次のequivalencies使用==<の面での演算子のすべての6つを実装することができます。彼らは、私は通常、「ネイティブ」理由で彼らの隆起のoperator<operator==を実装適用されるクラスの場合

a != b => !(a == b) 
a > b  => b < a 
a >= b => !(a < b) 
a <= b => !(b < a) 
+2

また、(a == b)は論理的に!(a

2

を標準的なアルゴリズムとコンテナです。

私はこれらの点で他の4つを実装します。

私は時々strcmpのスタイルで10、または-1を返すと、この面で他のすべての演算子を実装する「比較」機能を実装している別のアプローチを検討。 operator<operator==のように見える場合は、同じコードを多く共有する必要があるように見えますが、これはあまり頻繁に起こらないようです。

2

通常、オブジェクトの場合はoperator==、さらにoperator!=を実装します。多くのオブジェクトに照合シーケンスがないため、比較演算子<,< =、>、> =は意味をなさない。

また、boost::equality_comparableと​​を使用すると、operator==operator<のみを実装する必要があります。これらはboost/operators.hppにあります。

また、比較演算子をベースクラスまたはインターフェイスクラスに配置することは、Descendent_Aを2つの異なる子孫クラスであるDescendent_Bと比較することができるので、非常に扱いにくくなる可能性があることを知りました。

比較演算子は、クラスで必要に応じて実装する必要があります。多くのクラスはそれらを必要としません。また、継承の影響を考慮せずに、それらを実装するか、基底クラスでそれらを定義することに注意してください。

関連する問題