比較演算子(< =、>、==など)は通常、基本演算子として実装します。残りの比較演算子を実装したり、クラス間ですべての比較を行うことができます。オーバーロードする必要のある最小限の演算子は何ですか?
答えて
あなたは次の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. C++オーバーロード:[] []演算子のオーバーロード
- 3. 演算子のオーバーロード
- 4. 演算子オーバーロード==
- 5. C++:演算子オーバーロード、演算子+
- 6. C++演算子+演算子+ =オーバーロード
- 7. C:++で演算子のオーバーロード「:=」
- 8. オーバーロード比較です演算子「無効な演算子は、<」
- 9. シーケンス計算に必要な最小限のシーケンス「プリミティブ」とは何ですか?
- 10. ポストインクリメント演算子オーバーロード
- 11. 演算子オーバーロード+ BinaryTree
- 12. 演算子のあいまいなオーバーロード+
- 13. C++の演算子のオーバーロード
- 14. オーバーロード算術演算子
- 15. テンプレートクラスのバイナリ演算子オーバーロード
- 16. C#のオーバーロード演算子==クラス
- 17. オーバーロード! Rubyの演算子
- 18. + =イベント演算子のオーバーロード
- 19. 演算子のオーバーロード+ OBJ
- 20. constexpr演算子オーバーロードのガイドライン?
- 21. マニピュレータの演算子オーバーロード
- 22. 演算子のオーバーロード>>
- 23. テンプレートクラスと演算子のオーバーロード
- 24. ダーツ、[]演算子のオーバーロード?
- 25. C++マップの演算子オーバーロード
- 26. 演算子のオーバーロード== C++
- 27. 演算子のオーバーロード[]と=
- 28. C++演算子のオーバーロード順
- 29. C++ - のオーバーロード[]演算子
- 30. C++のオーバーロード()、[]演算子
演算子のオーバーロードに関するよくある質問(http://stackoverflow.com/questions/4421706/operator-overloading/4421719#4421719)をご覧になることをお勧めします。 –