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

时间:2013-10-15 16:52:08

标签: c++ inheritance

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

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

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

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

感谢。

-

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

1 个答案:

答案 0 :(得分:1)

这绝对有效,只要您的矢量在Creature*内存储指针Creature而非std::vector。否则object slicing将发生,因为向量仅为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) { }
};