c++ - 在 C++ 中覆盖 == 运算符
问题描述
我试图覆盖一个类的 == 运算符,但是比较似乎以某种方式失败。当我编写与名为eq的函数相同的(例如)时,不会出现问题。
class geo
{
...
bool operator==(geo const& other)
{
if(_id != other._id) return false;
if(!(name == other.name))return false;
if(is_primary!=other.is_primary)return false;
for(int i = 0; i<6;i++){
if(position[i]!=other.position[i])
return false;
}
return true;
}
....
private:
int _id, is_primary;
vector position;
string name;
}
在主要功能中:...
geo* i= new geo(2.1, 2.82, 1, 0, 0, 180, 0, "Patient-1",1);
geo* j= new geo(2.1, 2.82, 1, 0, 0, 180, 0, "Patient-1",1);
if(i==j)
std::cout<<"they are equal\n";
但是,当我运行它时,它说 i 和 j 是不同的。知道我在哪里做错了吗?
编辑:谢谢你们的评论。我刚刚解决了它;上面显示的代码工作得很好。当然,如果我试图简化代码以使此处粘贴可读的内容。所以我正在更新上面的代码,把它变成一个问题,这样未来的读者可能会看到比我更好的解决方案,并且我可以学到更多。
解决方案
通过这样做i == j
,您正在比较两个指向 的指针geo
,而不是它们指向的对象。由于指针明显不同,因此您会得到这样的结果。
要实际比较对象,您需要取消引用指针:
if (*i == *j)
`
推荐阅读
- php - SoapCall 从 WSDL PHP 中可用的服务中调用特定服务
- node.js - 获取图片并上传到 Google Cloud Storage
- javascript - 如何配置依赖检查来处理 TSX?
- javascript - app.js:3524 Uncaught ReferenceError: THREE not defined at Object../node_modules/three-bmfont-text/index.js
- google-api - 我想在不使用 Google File Picker 的情况下为特定文件“setAppId”
- javascript - 在 jQuery 插件中添加标记
- css - 如何为具有不同屏幕尺寸的所需输出安排行和列:
- java - 检查DOM中是否存在元素的条件
- c# - C#为什么不能从ioc获得正确的实例,当我使用反射来注册类时
- prometheus - grafana / prometheus,如何将度量值与其标签相乘