c++ - 多重继承,还是其他什么?

标签 c++ inheritance polymorphism

假设我有以下继承树:

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*/
}

非常感谢任何帮助!

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

最佳答案

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

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

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

class SDLEnemyBullet : public SDLBullet, public EnemyBullet {
  // just one Bullet subobject here
};

关于c++ - 多重继承,还是其他什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8495920/

相关文章:

c++ - 如何从一个 map 键列表中减去另一个 map 键列表并获得新 map ( map A - mab B = map C)

c++ - set object = null 在 C++ 中的替代方法是什么,比如 C#

使用循环计算 e 常数的 C++ 程序

c++选择函数的继承优先级

C++ 多态性和 vector ,将 vector 的派生类指向 vector 的基类

c++ - 如何处理 boost::program_options 中的未经请求的参数

java - 如何从另一个类中的 public 类型的参数化构造函数调用默认类型的参数化构造函数?

c++ - 将 public 关键字与结构一起使用

c++ - 多态性和指针数组 (C++)

c++ - 是否可以通过在基类中添加新的虚函数来破坏代码?