运算符==在C++中使用双重调度
应如何实施
operator==(const Base& base)
比较子类s.t.调用为时,将正确调度调用
Base* base1 = new Derived1();
Base* base2 = new Derived2();
base1->operator==(*base2)?
解决方案
- 将运算符==实现为独立函数。
- 让它对其中一个参数调用虚方法(例如IsEquity())
这将使您达到这样的境地
Derived1::IsEqual(const Base& base)
已呼叫。从这里您有一些选项
- 使用RTTI对Dynamic_Cast<;>基派生1
如果派生的数量很少且有限,则可以实现
virtual bool Base::IsEqualToDerived(const Derived1& d) {return false}; virtual bool Base::IsEqualToDerived(const Derived2& d) {return false};
作为虚拟方法。在派生1中,您覆盖并比较实数。
相关文章