比較演算子(< =、>、==など)は通常、基本演算子として実装します。残りの比較演算子を実装したり、クラス間ですべての比較を行うことができます。オーバーロードする必要のある最小限の演算子は何ですか?
答えて
あなたは次のequivalencies使用==
と<
の面での演算子のすべての6つを実装することができます。彼らは、私は通常、「ネイティブ」理由で彼らの隆起のoperator<
とoperator==
を実装適用されるクラスの場合
a != b => !(a == b)
a > b => b < a
a >= b => !(a < b)
a <= b => !(b < a)
また、(a == b)は論理的に!(a
を標準的なアルゴリズムとコンテナです。
私はこれらの点で他の4つを実装します。
私は時々strcmp
のスタイルで1
、0
、または-1
を返すと、この面で他のすべての演算子を実装する「比較」機能を実装している別のアプローチを検討。 operator<
とoperator==
のように見える場合は、同じコードを多く共有する必要があるように見えますが、これはあまり頻繁に起こらないようです。
通常、オブジェクトの場合はoperator==
、さらにoperator!=
を実装します。多くのオブジェクトに照合シーケンスがないため、比較演算子<,< =、>、> =は意味をなさない。
また、boost::equality_comparable
とを使用すると、operator==
とoperator<
のみを実装する必要があります。これらはboost/operators.hpp
にあります。
また、比較演算子をベースクラスまたはインターフェイスクラスに配置することは、Descendent_Aを2つの異なる子孫クラスであるDescendent_Bと比較することができるので、非常に扱いにくくなる可能性があることを知りました。
比較演算子は、クラスで必要に応じて実装する必要があります。多くのクラスはそれらを必要としません。また、継承の影響を考慮せずに、それらを実装するか、基底クラスでそれらを定義することに注意してください。
- 1. 演算子のオーバーロードを実装する最善の方法は何ですか?
- 2. 演算子のオーバーロード演算
- 3. C++オーバーロード:[] []演算子のオーバーロード
- 4. 演算子のオーバーロード
- 5. 演算子のオーバーロード*
- 6. オーバーロード演算子+
- 7. 演算子オーバーロード==
- 8. シーケンス計算に必要な最小限のシーケンス「プリミティブ」とは何ですか?
- 9. C:++で演算子のオーバーロード「:=」
- 10. C++演算子+演算子+ =オーバーロード
- 11. C++:演算子オーバーロード、演算子+
- 12. オーバーロード比較です演算子「無効な演算子は、<」
- 13. ostream演算子をベクトルでオーバーロードする
- 14. 演算子のあいまいなオーバーロード+
- 15. セグメンテーションフォールト&オーバーロード演算子
- 16. ポストインクリメント演算子オーバーロード
- 17. オーバーロード演算子+ char
- 18. クラス演算子*オーバーロード
- 19. オーバーロード演算子 `[]`と ':'
- 20. 演算子オーバーロード+ BinaryTree
- 21. C++オーバーロード演算子++
- 22. カスタムイテレータ演算子オーバーロード
- 23. オーバーロード=演算子Python
- 24. C++の演算子のオーバーロード
- 25. クラスの=演算子のオーバーロード
- 26. ClearScriptの演算子のオーバーロード
- 27. 演算子の '='と '+'のオーバーロード
- 28. Pythonでブール演算子を使用するためのビット演算子のオーバーロード
- 29. オーバーロード算術演算子
- 30. SQLでは、非集計の最小/最大演算子がありますか
演算子のオーバーロードに関するよくある質問(http://stackoverflow.com/questions/4421706/operator-overloading/4421719#4421719)をご覧になることをお勧めします。 –