运算符==重载不比较

Operator== overloaded does not compare

我刚刚在我的大学里写我的第一个面向对象的项目。我发现重载 == 运算符很困难。 在我的基地 class 有机体中,我有

friend bool operator==(const Organism &curr, const Organism &other);
bool operator==(const Organizm &curr, const Organizm &other) {
    if (curr.x == other.x) {
        if (curr.y == other.y)
            return true;
    }
    return false;
}

Animal继承自Organism,Fox和Wolf继承自Animal。 当我尝试比较

    Fox f(1, 2);
    Wolf w( 1, 2);
    Organizm *o1, *o2;
    o1 = &f;
    o2 = &w;
    bool ok = (o1 == o2);

比较 return 错误,即使适当的变量相等。 std::find 我需要 operator==,因为我把我所有的有机体都放在 std::vector.

您没有比较这些对象,甚至没有调用您的运算符。

您正在将 指针 与这些对象进行比较。显然,比较总是会失败,因为两个对象不能同时存在于同一个地方。

我猜想您打算写以下内容之一:

Fox f(1, 2);
Wolf w(1, 2);

Organizm* o1 = &f;
Organizm* o2 = &w;

const bool ok = (*o1 == *o2);

或者更好:

Fox f(1, 2);
Wolf w(1, 2);

const Organizm& o1 = f;
const Organizm& o2 = w;

const bool ok = (o1 == o2);

或者,简单地说:

Fox f(1, 2);
Wolf w(1, 2);

// implicit conversions are a thing!
const bool ok = (f == w);

问题是你的代码没有比较对象;它比较他们的地址:

bool ok = (o1 == o2); // Compare address of f to address of w

如果你想比较指针引用的对象,调用应该是这样的:

bool ok = (*o1 == *o2);

Organizm *o1 = &f;
Organizm *o2 = &w;
bool ok = (o1 == o2);

您正在比较 指针

你想要

bool ok = (*o1 == *o2);

使用自定义运算符比较对象。