我有3个课程MovableObject
,FixedObject
和CollisionObject
。 CollisionObject
应该可以是MovableObject
或FixedObject
。但是使用多重继承是没有意义的,因为它不能同时使用。基本上,如果我创建Projectile
,层次结构将是:
Sprite <- MovableObject <- CollisionObject <- Projectile
如果我创建Obstacle
,那将是:
Sprite <- FixedObject <- CollisionObject <- Obstacle
(我的基类是Sprite
)
因此CollisionObject
应继承的内容取决于子对象继承的内容(Movable-
或FixedObject
)。但是我如何以一种很好的方式在C ++中实现它呢?
答案 0 :(得分:2)
免责声明:根据您的其他设计,此答案的实用性会有很大差异。
那就是说,&#34; A CollisionObject
应该可能是MovableObject
或FixedObject
&#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> {...};