更改派生类继承的内容

时间:2017-01-21 13:59:16

标签: c++ oop inheritance

我有3个课程MovableObjectFixedObjectCollisionObjectCollisionObject应该可以是MovableObjectFixedObject。但是使用多重继承是没有意义的,因为它不能同时使用。基本上,如果我创建Projectile,层次结构将是:

Sprite <- MovableObject <- CollisionObject <- Projectile

如果我创建Obstacle,那将是:

Sprite <- FixedObject <- CollisionObject <- Obstacle

(我的基类是Sprite

因此CollisionObject应继承的内容取决于子对象继承的内容(Movable-FixedObject)。但是我如何以一种很好的方式在C ++中实现它呢?

2 个答案:

答案 0 :(得分:2)

免责声明:根据您的其他设计,此答案的实用性会有很大差异。

那就是说,&#34; A CollisionObject应该可能是MovableObjectFixedObject&#34;听起来你不需要CollisionObject以某种方式切换它的基类,而是基类。

struct CollisionObject { };
struct MovableObject : CollisionObject { };
struct FixedObject : CollisionObject { };

答案 1 :(得分:2)

如果CollisionObject是一个类,那么它将始终从相同的类继承,因此如果您不想使用多重继承,则无法请求。但是多重继承会使CollisionObject既可移动又固定,这听起来不太合适。

但是,如果您将CollisionObject设为模板,则可以执行以下操作:

template<typename Base> class CollisionObject : public Base
{
   ...
};

class Projectile : public CollisionObject<MovableObject> {...};
class Obstacle : public CollisionObject<FixedObject> {...};