【发布时间】:2010-12-18 10:02:10
【问题描述】:
可能重复:
What’s the right way to overload operator== for a class hierarchy?
在 C++ 中,派生类如何以有意义的方式覆盖基类相等性测试?
例如,假设我有一个基类 A。类 B 和 C 派生自 A。现在给定两个指向两个 A 对象的指针,我可以测试它们是否相等(包括任何子类数据)?
class A {
public: int data;
};
class B : public A {
public: float more_data; bool something_else;
};
class C : public A {
public: double more_data;
};
A* one = new B;
A* two = new B;
A* three = new C;
//How can I test if one, two, or three are equal
//including any derived class data?
有干净的方法吗?我最好的选择是什么?
谢谢!
【问题讨论】:
-
您想比较
T==T,其中T可能是A、B或C(很好),或者您想比较A与B和A与C和B与C(有问题)? -
在上面的例子中,我想比较一与二和三。它们都是A指针。
-
@Imbue:那么你想要的就没有意义了。因为只有
B有something_else它永远不能等于A或C。这种比较的语义是什么? -
@sbi:我不是要求将 B 与 A 或 B 与 C 进行比较。我要求将两个 As 一起比较。在我上面的例子中,一、二、三都是 A*。
标签: c++ inheritance operators equality equals-operator