首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >静态对象池和构造函数的继承?

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

Stack Overflow用户
提问于 2013-10-15 16:52:07
回答 1查看 131关注 0票数 1

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

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

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

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

谢谢。

--

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-15 16:58:12

只要矢量存储指针Creature*,而不是在std::vector中存储Creature,这是绝对有效的。否则,object slicing就会发生,因为向量保留了只供生物使用的空间,子类的每一个附加特性都被丢弃。

关于构造函数调用堆栈,它非常简单:

代码语言:javascript
运行
复制
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) { }
};
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19386728

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档