【发布时间】:2019-07-01 04:04:15
【问题描述】:
我试图覆盖一个类的 == 运算符,但是比较似乎以某种方式失败。当我编写与名为 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 是不同的。知道我在哪里做错了吗?
编辑: 谢谢你们在 cmets 的家伙。我刚刚解决了它; 上面显示的代码工作得很好。当然,如果我试图简化代码以使此处粘贴可读的内容。所以我正在更新上面的代码,把它变成一个问题,这样未来的读者可能会看到比我更好的解决方案,并且我可以学到更多。
【问题讨论】:
-
请提供构造函数声明,对于 geo ?并且“向量位置”在语法上是有效的??
-
“知道我哪里做错了吗?” - 是的,你没有显示的代码有问题。
-
通过在每个 return false 语句上放置断点来调试它并检查返回 false 的位置
-
你来自 Java 吗?您几乎不应该在 C++ 中使用指针和
new。 -
如果你需要拥有/管理指针,你应该使用智能指针。原始指针不是管理的,不应该用
new初始化,但总是用现有对象的地址初始化。通常你只使用对象。geo i(2.1, 2.82, 1, 0, 0, 180, 0, "Patient-1",1);.
标签: c++ overriding comparison-operators