我是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;
}
我必须遍历一些代码和每个循环,我需要更新移动对象的速度,因为我需要检查移动对象和静态对象之间的碰撞,我最好将所有对象放在同一个向量中。 / p>
这是一个很好的做法,可以在ObjectType的开关上将WorldObject静态广播到MovingObject吗?
有没有更好的方法呢?我应该创建一个虚拟的Speed()函数吗?
由于
答案 0 :(得分:1)
您遇到的问题是您的WorldObjectCollection
向量是基础对象的向量。将StaticObject
和MovingObject
放在向量中slice,以便只存储WorldObject
部分。所以你的static_cast
根本不起作用。
一种可行的方法是拥有一个世界vector<WorldObject*>
。使用枚举可以起作用,但是你自己建议的多态性方法会更容易操作和维护。例如,随着rgame的增长和发展,添加新类型的对象会容易得多。