3

应该如何实施

operator==(const Base& base)

比较子类 st 调用时调用将被正确调度为

Base* base1 = new Derived1();
Base* base2 = new Derived2();
base1->operator==(*base2)?
4

2 回答 2

6
  1. 将 operator== 实现为独立函数。
  2. 让它在其中一个参数上调用虚拟方法(例如 IsEqual())

这会让你达到你拥有的地步

Derived1::IsEqual(const Base& base)

叫。从这里你有一些选择

  1. 使用 RTTI 将 dynamic_cast<> base 转换为 Derived1
  2. 如果派生的数量很小且有限,则可以实现

    virtual bool Base::IsEqualToDerived(const Derived1& d) {return false};
    virtual bool Base::IsEqualToDerived(const Derived2& d) {return false};
    

作为虚拟方法。在 Derived1 中,您可以覆盖并进行真实比较。

于 2010-07-28T12:31:33.180 回答
1

这似乎是关于类和类型的通用 C++ 问题,而不是关于 operator== 的特定问题。据我所知,在您给出的特定示例中,除了使用dynamic_cast之外别无他法

于 2010-07-28T12:45:41.017 回答