假设我有以下继承树:
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/