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

C++ 静态对象池和构造函数的继承?,c++,inheritance,C++,Inheritance,我正在做一个游戏/模拟,处理游戏中所有生物的管理。 有一种基类生物,不同种类的生物从中获得遗传 在这段代码的早期版本中,我只是单独使用基类作为任何给定生物的泛型,我有一个私有的静态向量,如果你愿意的话,它保存了一个电话簿,记录了游戏中存在的所有生物的名字。这由生物的构造器处理,将新生物的地址添加到堆栈中。很简单 当我引入继承时,我会遇到心理障碍。如果我继续将生物类调整为基类(将向量移动到我想象的受保护状态?),并从中定义猴子、熊和老虎的任意子类。。。当我创建一个从生物继承的类的实例时,它还会被添

我正在做一个游戏/模拟,处理游戏中所有生物的管理。 有一种基类生物,不同种类的生物从中获得遗传

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

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

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

谢谢

--


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

这肯定有效,只要你的向量在
std::vector
中存储指针
生物*
,而不是
生物
。否则将发生,因为向量只为生物保留空间,并且子类的每个附加特征都被丢弃

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

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) { }
};

只要你的向量在你的
std::vector
中存储指针
bioture*
,而不是
bioture
,这肯定是可行的。否则将发生,因为向量只为生物保留空间,并且子类的每个附加特征都被丢弃

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

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) { }
};

需要工厂模式吗?需要工厂模式吗?是 啊我在《生物》中把它称为vector creatureStack;,指向生物的指针数组。谢谢。我一定会保存该代码的副本以供参考。:)请注意,如果您必须管理
生物
实例的许多分配和解除分配,那么定制内存池可以方便地避免堆碎片。你将不得不解决这样一个事实,子类有不同的大小,但如果你在互联网上搜索,它有很多!我在《生物》中把它称为vector creatureStack;,指向生物的指针数组。谢谢。我一定会保存该代码的副本以供参考。:)请注意,如果您必须管理
生物
实例的许多分配和解除分配,那么定制内存池可以方便地避免堆碎片。你将不得不解决这样一个事实,子类有不同的大小,但如果你在互联网上搜索,它有很多。