リレーショナル演算子(==、>、<、> =、< =)をオーバーロードしようとしていますが、エラーを返すのではなく、2つのオブジェクトが異なる場合はfalseを返すことができます。たとえば、ArrayListクラスと現在比較できないVectorクラスがあります。どうすればこれを達成できますか?C++ 2つのオブジェクトが同じかどうかを確認するためにリレーショナル演算子をオーバーロードするにはどうすればよいですか?
-3
A
答えて
1
多分何か試してみてください:
#include <iostream>
class ArrayList {};
class Vector {};
bool operator==(Vector const &v, ArrayList const &al) { return false; }
bool operator==(ArrayList const &al, Vector const &v) { return false; }
int main()
{
ArrayList al;
Vector v;
std::cout << (al == v ? "true" : "false") << std::endl;
std::cout << (v == al ? "true" : "false") << std::endl;
return 0;
}
両方の比較はfalseを出力します。テンプレートを使用して
EDIT:
#include <iostream>
#include <type_traits>
class ArrayList {};
class Vector {};
class Whatever {};
template <class T, class U> bool operator==(T const &, U const &)
{
return std::is_same<T, U>::value;
}
int main()
{
ArrayList al;
Vector v;
Whatever w;
std::cout << (al == v ? "true" : "false") << std::endl;
std::cout << (v == al ? "true" : "false") << std::endl;
std::cout << (w == v ? "true" : "false") << std::endl;
std::cout << (w == w ? "true" : "false") << std::endl;
return 0;
}
クラスがない場合は、同じまたは偽である場合、これは単にtrueを返します。
+0
ええ、その特定のケースでは、正直に言うと、これは複数のクラスを含む課題の質問ですが、デモでは2つが比較されます。だから私はこれを行う必要があるすべての重要な理由は本当にありませんが、私はすべてのクラスのためにそれが可能かどうか疑問に思っていた。 –
+0
あなたはテンプレートが好きかもしれませんが、私は簡単な例を追加しました –
関連する問題
- 1. 同じクラスのオブジェクトを比較するために '<'演算子をどのようにオーバーロードしますか?
- 2. 2つのアドレスが同じかどうかを確認するにはどうすればいいですか?
- 3. オーバーロードされた演算子の定義を見つけるにはどうすればよいですか?
- 4. 2つのイメージに同じオブジェクトが含まれているかどうかを確認するにはどうすればよいですか?
- 5. C++で ' - >'演算子をどのようにオーバーロードするのですか?
- 6. 2つのオブジェクトの型が同じかどうかを確認
- 7. []演算子をどのようにオーバーロードできますか?
- 8. C++のクラスで演算子のオーバーロード関数を使用するにはどうすればよいですか?
- 9. 2つの配列に同じ要素がPerlで含まれているかどうかを確認するにはどうすればよいですか?
- 10. 2つのオブジェクトを合計するために演算子がオーバーロードされる
- 11. 演算子を同じステートメントの行で2回呼び出すためにC++で変更するにはどうすればよいですか?
- 12. 配列の値が同じかどうかを確認するにはどうすればいいですか?
- 13. <<演算子をどのようにオーバーロードしますか?
- 14. 2つのstd :: vectorに同じ要素だけが含まれているかどうかを確認するにはどうすればよいですか?
- 15. F#対話型の演算子のタイプを確認するにはどうすればよいですか?
- 16. この関数はどのようにオーバーロードされた演算子ですか?
- 17. オブジェクトがコレクションであるかどうかを確認するにはどうすればよいですか? (スウィフト)
- 18. 2つのオブジェクトから同じ値でオブジェクトを作成するにはどうすればよいですか?
- 19. ユーザーが同じ番号を2回入力したかどうかを確認するにはどうすればよいですか? C++ヘルプ?
- 20. 2つのjQueryセレクタが同じ要素を指しているかどうかを確認するにはどうすればよいですか?
- 21. Scala - オブジェクトがスレッドセーフであるかどうかを確認するにはどうすればよいですか?
- 22. オブジェクトが「空」であるかどうかを確認するにはどうすればよいですか?
- 23. 2つの論理演算と比較演算が等しいことを確認するにはどうすればよいですか?
- 24. ostream <<演算子を配列でオーバーロードするにはどうすればよいですか?
- 25. 2つの大きなテキストファイルの内容が100%同じかどうかを確認するにはどうすればよいですか?
- 26. javascriptオブジェクトがイメージかキャンバスかどうかを確認するにはどうすればよいですか?
- 27. オブジェクトがC++の右側にある場合、*演算子をどのようにオーバーロードしますか?
- 28. オブジェクトのタイプを確認するにはどうすればよいですか?
- 29. テンプレート型クラスのリレーショナル演算子オーバーロード(C++)
- 30. 2つのDockerイメージの内容がまったく同じかどうかを確認するにはどうすればいいですか?
オブジェクトが異なる場合、 '=='は 'false'を返すのが普通です。それらのオブジェクトが「エラーを返す」(それが意味するものはすべて)では正常ではありません。あなたはあなたがどんな問題を抱えているかを精緻化できますか? –
オペレータのオーバーロードの基本ルールとイディオムは何ですか?(https://stackoverflow.com/questions/4421706/what-are-the-basic-rules-and-idioms-for-operator-overloading) – user0042
彼は、さまざまな型のオブジェクトを比較できるようにしたいと考えています。これは、しばしば実装されている(コンパイル時にエラーが発生する)ものではありません。 –