【发布时间】:2021-09-13 23:44:22
【问题描述】:
假设我有一个基类和多个派生类(将来可能会更多)。 有没有办法覆盖派生类的比较器,或者达到相同的结果?
class Base {
public:
virtual bool operator==(const Base&) = 0;
};
class Version1 : public Base {
public:
bool operator==(const Derived&) {
// do something
}
};
class Version2 : public Base {
public:
bool operator==(const Derived&) {
// do something
}
};
// Could be more version derived class
int main() {
Base *obj1 = new Version1;
Base *obj2 = new Version1;
std::cout << (*obj1 == *obj2) << std::endl; // is there a way to do so?
}
具体来说,Base 的任何子类都可以与 Base 的任何其他子类相媲美,而无需宏和 dynamic_cast。
【问题讨论】:
-
operator==中Derived的那些用法应该分别是Version1和Version2吗?因为你没有任何名为Derived... -
并且要清楚的是,您的意图是
Base的任何子类与Base的任何其他子类可比较,而特定子类可与该子类的其他实例可比较,但不是Base的其他子类不是直系祖先或后代?因为那个纯虚拟声明是说任何Base子类必须与任何其他Base子类相当,即使它们是不同的类,只使用Base提供的功能,这是一个奇怪的要求。 -
Base 的任何子类都可以与任何其他子类进行比较。
标签: c++ inheritance overriding