c++比较两个对象

C++ comparing two objects

本文关键字:两个 对象 比较 c++      更新时间:2023-10-16

我得到了这个函数:

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;

比较函数的语义取决于你的意图和对象内部的性质和语义。在您的例子中,只有您知道foo是什么,因此,只有您知道如何正确地比较一个foo对象和另一个foo对象。对于你的问题,没有一个通用的、放之四海而皆准的答案。

你必须仔细检查并比较自己内心的变量。

这样,你定义了什么是相等。如果foo代表一个人,你可以定义两个foo为相同的名字,或者名字和姓氏,或者社会安全号码,或者任何你想要的。只有你,作为类的作者,知道你的两个对象相等意味着什么。

这取决于类foo和它的数据成员,以及什么是有效的等式。假设您的foo如下所示:

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

如果您想基于id字段进行比较:

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

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

如果你被要求在你的作业中使用那个签名,你需要研究friend关键字…毕竟,家庭作业,没人会帮你做。

如果不是,则考虑使操作符成为foo类的成员。

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;