C ++比较两个对象

时间:2011-08-27 02:50:11

标签: c++ object compare

我有这个功能:

bool operator==(const foo& foo1, const foo& foo2)

如何将两个对象相互比较,是否有一个允许我做的库函数?或者我必须在物理上比较对象内的每个变量。

编辑:

foo对象成立:

private: 
int *values;
size_t *columns; 
std::map< size_t, std::pair<size_t, unsigned int> > maps;

5 个答案:

答案 0 :(得分:5)

比较函数的语义取决于您的意图以及对象内部的性质和语义。在您的情况下,只有您知道foo是什么,因此,只有您知道如何正确比较一个foo对象与另一个foo对象。你的问题没有普遍的一刀切的答案。

答案 1 :(得分:2)

你必须经历并比较你自己内部的变量。

这样,你定义了什么是相等的。如果foo代表一个人,您可以将两个foo定义为仅相同的名字,或者通过名字和姓氏,或社会安全号码,或任何您想要的。只有你作为班级的作者,才能知道你的两个物体是平等的。

答案 2 :(得分:0)

它依赖于类foo以及它拥有的数据成员,以及vaild的相等性。想象一下,你foo如下:

class foo {
private:
    long id;
    ...
};

如果您想根据id字段进行比较:

bool operator==(const foo& foo1, const foo& foo2) { return foo1.id == foo2.id; }

它们可以根据您的需求而变得简单或复杂。

答案 3 :(得分:0)

您拥有的重载运算符的签名是针对在foo类之外定义的静态函数。由于您声明foo的数据成员被声明为private,因此您将很难让运营商工作。

如果您需要在家庭作业中使用该签名,则需要研究friend关键字...毕竟,作业,没有人会为您做这件事

如果没有,请考虑让运营商成为foo类的成员。 This是运算符重载的一个很好的通用参考。

答案 4 :(得分:0)

bool operator ==(const Student &first, const Student &second)
{
    return (first.rollno == second.rollno && first.str == second.str);
}

class Student
{
public:
    string str;
    int rollno;

    Student(string str1,int rollno1)
    {
        str=str1;
        rollno1=rollno;
    }
};

cout <<"is s1=s2? \n" << boolalpha << operator==(s1,s2) <<endl;