静态对象池和构造函数的继承

Inheritance of static object pools and constructors?

本文关键字:继承 构造函数 对象 静态      更新时间:2023-10-16

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

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

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

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

谢谢。

--

我以这种方式做事的想法,例如图形。这样,我可以循环浏览所有存在的生物,并通过多态性调用每个返回其精灵、X Y 位置等的生物的函数。

这绝对有效,只要您的向量存储指针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) { }
};