我正在进行游戏/模拟,并负责管理游戏中的所有生物。 有一个基类生物,不同种类的生物从中继承。
在这段代码的早期版本中,我只使用基类作为任何给定生物的通用基础,我有一个私有静态向量,如果你将拥有游戏中存在的所有生物,它会保留一个电话簿。这是由Creature的构造函数处理的,将新生物的地址添加到堆栈中。很简单。
我得到心理障碍的地方是我引入继承的时候。如果我继续将Creature类调整为基类(将向量移动到我想象的受保护状态?),并从那里定义一些Monkey,Bear和Tiger的任意子类......当我创建一个实例一个继承自Creature的类,它是否也会被添加到Creature父类的指针向量中?也许更直接地,创建这些子类之一的实例是否也会调用父类的构造函数?
我是否在正确的思路上,或者我需要做些什么来实现这种行为? 如果需要,我可以提供更具体的细节。
感谢。
-
我以这种方式做事的想法,例如图形。通过这种方式,我可以遍历所有存在的生物,并通过多态性调用每个返回其精灵,X Y位置等生物的函数。
答案 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) { }
};