場合によっては、特定のタイプのオブジェクトが特定のタイプの動作をサポートすることを示すインターフェイスを発明します。たとえば、 と の両方DogにインターフェイスScaryDogがありMeleeAttackerます。

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