Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++如何重载关系运算符来检查两个对象是否相同?_C++_Oop_Comparison Operators - Fatal编程技术网

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。不同类型,但这毫无意义。这不是你真正的问题。你需要有说服力地解释你真正的问题本身。是的,这将适用于特定的情况,老实说,这是一个涉及多个类的作业问题,但在演示中,这两个是要比较的。所以我需要这样做并没有任何主要的原因,但我想知道这是否适用于所有类。也许你们更喜欢模板,我添加了一个简单的例子