1

我正在开发游戏/模拟,并处理管理游戏中的所有生物。有一个基类 Creature ,不同种类的生物可以从中继承。

在这段代码的早期版本中,我只是单独使用基类作为任何给定生物的泛型,如果你愿意的话,我有一个私有静态向量来保存游戏中存在的所有生物的电话簿。这由生物的构造函数处理,将新生物的地址添加到堆栈中。很简单。

当我引入继承时,我遇到了一个心理障碍。如果我继续将 Creature 类调整为基类(将向量移动到我想像的受保护状态?),然后从那里定义猴子、熊和老虎的一些任意子类......当我创建一个实例时一个从 Creature 继承的类,它是否会被添加到 Creature 父类的指针向量中?也许更直接的是,创建这些子类之一的实例是否也会调用父类的构造函数?

我的思路是否正确,或者我必须做些什么才能实现这种行为?如果需要,我可以提供更具体的细节。

谢谢。

--

我以这种方式做事的想法是,例如图形。这样我就可以循环遍历所有存在的生物,并通过每个生物的多态调用函数返回它们的精灵、XY 位置等。

4

1 回答 1

1

这绝对有效,只要您的向量存储指针Creature*而不是Creature在您的std::vector. 否则会发生对象切片,因为向量只为 Creature 保留空间,并且子类的每个附加特征都被丢弃

关于构造函数调用堆栈,它相当简单:

class A {
  private:
    int aField;
  public:
    A(int aField) : aField(aField) { }
};

class B : public A {
  private:
    int bField;
  public:
    B(int aField, int bField) : A(aField), bField(bField) { }
};
于 2013-10-15T16:58:12.883 回答