c++比较两个对象
C++ comparing two objects
我得到了这个函数:
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;
相关文章:
- 如何返回一个类的两个对象相加的结果
- 为什么Mat类的两个对象可以在不重载运算符+的情况下添加
- 停止cmake target_link_libraries将插件中静态库的两个对象文件链接到静态库本身
- 为什么C++在将一个对象复制到另一个对象时需要对这两个对象进行低级常量限定
- int数据类型的指针指向的是什么,如果是一个类的私有数据成员,我们创建了该类的两个对象?
- 具有相同特征的两个对象是否只在内存中存储一次?无论定义它们的函数是什么,都是不同的
- 如何在Qt中连接来自不同窗口的两个对象?
- C++两个对象,其中包含指向同一数组不同部分的指针
- 为什么将两个对象分配给另一个对象后,两个对象不一样?
- C++:在另外两个对象之间共享一个对象
- 在单元测试中,如何在不使用 operator== 的情况下比较两个对象,这可能会错过新成员?
- 同一类的两个对象相互引用
- 将类对象传递给两个对象
- 如何调用运算符函数添加两个对象?
- 让一个名为A的类.传递以下两个对象有什么区别:(a)obj1和(b)obj1()
- 比较矢量迭代中的两个对象C
- 当我有两个对象时<<如何重载运算符?(有关系)
- 声明一个模板函数,将模板类友元的两个对象(仅)带到这两个专用化
- 使用指针将两个对象(每个都与一个类)相关联
- 比较类的两个对象之间的数据