假设我有以下继承树:

SDLBullet inherits from Bullet inherits from Entity
EnemyBullet inherits form Bullet inherits from Entity

现在,我需要一个新类SDLEnemyBullet,该类需要在SDLBullet中实现的绘制以及在EnemyBullet中实现的碰撞。我该怎么做?使用多重继承解决吗?如果没有,请随时编辑我的问题和标题。如果是这样,我将如何实现?

以下是一些代码示例:
class Entity {
  bool collision(Entity) = 0;
  void draw() = 0;
}

class Bullet : Entity {
  bool collision(Entity) {/*some implementation*/};
  void draw() {/*draw me*/};
}

class SDLBullet : Bullet {
  void draw() {/*draw me using SDL*/};
}

class EnemyBullet : Bullet {
  bool collision(Entity) {/*if Entity is a fellow enemy, don't collide*/};
}

class SDLEnemyBullet : ????? {
  /*I need SDLBullet::draw() here*/
  /*I need EnemyBullet::collision(Entity) here*/
  /*I certainly do not want EnemyBullet::draw nor SDLBullet::collision here*/
}

任何帮助深表感谢!

(顺便说一句:这是一个学校项目,并且向我们建议了这样的继承树。没有人阻止我们做得更好和更好。这就是为什么我问这个问题。)

最佳答案

教科书解决方案涉及多重继承和虚拟继承。

类SDLBullet:公共(public)虚拟项目符号{
void draw(){/ *使用SDL绘制我* /};
};

EnemyBullet类:公共(public)虚拟项目符号{
bool(boolean) 碰撞(实体){/ *如果实体是同伴,不要碰撞* /};
};

SDLEnemyBullet类:公共(public)SDLBullet,公共(public)EnemyBullet {
//这里只有一个Bullet子对象
};

10-06 14:35