我有这个功能:
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;
答案 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;