operator ==在C中使用双重调度
作者:互联网
应该如何实施
operator==(const Base& base)
比较子类s.t.调用时调用将被正确调度
Base* base1 = new Derived1();
Base* base2 = new Derived2();
base1->operator==(*base2)?
解决方法:
>将operator ==实现为独立功能.
>让它在其中一个参数上调用虚方法(例如IsEqual())
这让你达到了你的目标
Derived1::IsEqual(const Base& base)
调用.从这里你有一些选择
>使用RTTI来dynamic_cast<>基于Derived1
>如果派生的数量很小且有限,则可以实现
virtual bool Base::IsEqualToDerived(const Derived1& d) {return false};
virtual bool Base::IsEqualToDerived(const Derived2& d) {return false};
作为虚拟方法.在Derived1中,您覆盖并比较真实.
标签:c,operator-overloading,double-dispatch 来源: https://codeday.me/bug/20190730/1581853.html