1

有时,您发明一个接口来表示某种类型的对象支持某种类型的行为。例如,两者Dog都有ScaryDog接口MeleeAttacker

在此处输入图像描述

但是现在说我将 a 传递给MeleeAttacker*某个函数,

void Attack( MeleeAttacker* attacker, Living *victim ) ;

因为MeleeAttacker从层次结构中分离出来,我无法访问的生命体征——即使attacker知道是一个. 由于我构建层次结构的方式,我知道它将永远是 common class 的继承者。但是代码不知道这一点。我的问题是,我怎么能告诉代码呢?LivingattackerattackerLivingMeleeAttackersWarmBlooded

我想我只是通过引入MeleeAttacker接口来混淆了事情,但我不想WarmBlooded用不会在层次结构的某些分支中实现的功能(例如,aBird的混战的“实现”)挤满基类攻击可能是{}什么都没有))。

4

1 回答 1

1

为什么不简单地将您的论点转换为Living *using dyanmic_cast?你知道它会的,因为你保证通过你的具体类来实现后者,只要前者被实现。

基本上这个想法有点像queryInterfacein COM,只是你不必queryInterface在每个类中实际实现自己,因为你知道强制转换会起作用,而且你不必在调用代码中实现优雅的处理,因为,再一次,你知道演员会成功。

于 2013-09-13T21:43:22.750 回答