假设我有以下继承树:
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子对象
};