其他分享
首页 > 其他分享> > operator ==在C中使用双重调度

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