运算符==重载不比较
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);
使用自定义运算符比较对象。
我刚刚在我的大学里写我的第一个面向对象的项目。我发现重载 == 运算符很困难。 在我的基地 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);
使用自定义运算符比较对象。