C++如何重载关系运算符来检查两个对象是否相同?
我正在尝试重载关系运算符==,>,=,尝试以下操作:C++如何重载关系运算符来检查两个对象是否相同?,c++,oop,comparison-operators,C++,Oop,Comparison Operators,我正在尝试重载关系运算符==,>,=,尝试以下操作: #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;
#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;
}
两种比较都会打印错误
使用模板编辑:
#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;如果类不相同,则返回false。当对象不同时,==返回false是正常的,而它们中的任何一个返回错误都是不正常的,不管您的意思是什么。你能详细说明一下你到底遇到了什么问题吗?我想他的意思是他希望能够比较不同类型的对象,这不是经常实现的,因此会导致用户定义类型的编译时错误。当然,我有几个类可以重载这些操作符,并且可以很好地处理它们类中只接受一个对象的函数,例如bool操作符==const ArrayList&a,但是我想知道我是否可以在一个单独的类中重载它们,以检查任何对象,例如我的ArrayList类和我的Vector类。目前,我得到一个“二进制表达式的操作数无效”错误。这是一个明显的XY问题。你想解决的真正问题是什么。不,不是关于以这种方式重载比较运算符的问题,而是您认为解决方案的真正问题是以这种方式重载比较运算符。因为,否则,如果第一个5是int,第二个5是char,那么建议5==5将为false。不同类型,但这毫无意义。这不是你真正的问题。你需要有说服力地解释你真正的问题本身。是的,这将适用于特定的情况,老实说,这是一个涉及多个类的作业问题,但在演示中,这两个是要比较的。所以我需要这样做并没有任何主要的原因,但我想知道这是否适用于所有类。也许你们更喜欢模板,我添加了一个简单的例子