我是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
向量是基础对象的向量。将StaticObject
和MovingObject
放在向量中会slice它们,以便仅存储WorldObject
部分。因此,您的static_cast
根本无法使用。
一个可行的方法是拥有一个世界vector<WorldObject*>
。使用枚举可能有效,但是您建议自己使用多态的方法将更易于操作和维护。例如,随着游戏的发展和添加新的对象会容易得多。