実例を挙げた方が良いか。

struct hittable {
  virtual void get_hit_rect(rect&, hit_type&) = 0;
};

class player_task : public hittable
{
  bool invisiable_;
public:
  void get_hit_rect(rect& rc, hit_type& htype)
  {
    if (invisible_)
      rc = INVALID_RECT;  // 不可視状態の時には、当たり判定なし
    else
      ...
  }
};

インターフェースの多重継承を利用すれば、こんな感じでタスクの内部状態
を利用して当たり判定を変更することが、容易に可能になる。コンポジション
で同じ事をやろうとしたら、思い切り不自然なコードを書くことになるぞ。