我是C ++编程的新手,我想学习继承。我正在构建一个用于继承的实践软件,我想知道它是否是一个好的设计。这是我的程序的一部分

enum ObjectType{MovingObj, StaticObj};

class WorldObject{
public:
   vector<double> Position;
   WorldObject(ObjectType Type);
};

class MovingObject : public WorldObject {
public:
   double Speed();
   MovingObject(): WorldObject(MovingObj){}
};

class StaticObject: public WorldObject {
public:
   MovingObject(): WorldObject(StaticObj){}
};


我有一个像这样的物体世界

class World{
public:
   vector<WorldObject> WorldObjectCollection;
}


我必须遍历一些代码,每个循环都需要更新运动对象的速度,并且由于我需要检查运动对象与静态对象之间的碰撞,因此最好将所有对象放在同一向量中。

在ObjectType的开关的基础上将WorldObject静态广播到MovingObject的一种好习惯吗?

有更好的方法吗?我应该创建一个虚拟Speed()函数吗?

谢谢

最佳答案

您将遇到的问题是WorldObjectCollection向量是基础对象的向量。将StaticObjectMovingObject放在向量中会slice它们,以便仅存储WorldObject部分。因此,您的static_cast根本无法使用。

一个可行的方法是拥有一个世界vector<WorldObject*>。使用枚举可能有效,但是您建议自己使用多态的方法将更易于操作和维护。例如,随着游戏的发展和添加新的对象会容易得多。

09-05 22:48