首页 > 解决方案 > 在 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 是不同的。知道我在哪里做错了吗?

编辑:谢谢你们的评论。我刚刚解决了它;上面显示的代码工作得很好。当然,如果我试图简化代码以使此处粘贴可读的内容。所以我正在更新上面的代码,把它变成一个问题,这样未来的读者可能会看到比我更好的解决方案,并且我可以学到更多。

标签: c++overridingcomparison-operators

解决方案


通过这样做i == j,您正在比较两个指向 的指针geo,而不是它们指向的对象。由于指针明显不同,因此您会得到这样的结果。

要实际比较对象,您需要取消引用指针:

if (*i == *j) `


推荐阅读