場合によっては、特定のタイプのオブジェクトが特定のタイプの動作をサポートすることを示すインターフェイスを発明します。たとえば、 と の両方Dog
にインターフェイスScaryDog
がありMeleeAttacker
ます。
しかし、MeleeAttacker*
ある関数にa を渡すとします。
void Attack( MeleeAttacker* attacker, Living *victim ) ;
MeleeAttacker
は階層から分離されているため、 のバイタルにアクセスできattacker
ませんLiving
attacker
attacker
Living
。階層をどのように構築したかにより、が常に共通クラスの継承者になることがわかっています。しかし、コードはそれを知りません。私の質問は、どうすればコードにそれを伝えることができますか?MeleeAttackers
WarmBlooded
インターフェイスを導入することで物事を混乱させただけだと思いますが、階層の一部のブランチで実装されない関数でMeleeAttacker
基本クラスを混雑させたくありませんでしWarmBlooded
た (たとえば、 aBird
の近接攻撃の「実装」攻撃かもしれません{}
(何もありません))。