0

我的 C++ 程序中有以下类:

  • 游戏实体
  • 继承自 game_entity 的 game_creature

我计划有更多的类继承自game_entity、game_creature,甚至是其他一些较低的类。

我还有一个 game_entity 类型的数组,其中包含 game_entity 实例和 game_creature 实例。现在我的问题是这样的:当数组传递给函数时,我尝试循环遍历数组,但是当它到达 game_creature 对象时,它没有使用下标形式将指针增加足够多。

例如:

如果第一个对象是一个 game_creature(它的字段比 game_entity 多),它将访问前 3 个字段(在 game_creature 上与在 game_entity 上相同),但是当我这样做时array[1],它将访问第一个 game_creature 中的后两个整数作为第二个 game_creature 对象中的前两个整数。

这意味着如果我有一个 x = 1、y = 2、sprite* = Something、movespeed = 5 和 health = 25 的 game_creature,那么它将以 5 和 25 访问第二个 game_creature 对象的 x 和 y,这实际上是第一个 game_creature 的 movespeed 和 health。

我认为这是因为指针指向“game_entity”的 x 和 y 的内存实际上是“game_creature”的移动速度和健康所在的位置。但是,我不知道如何创建一个 game_entities 数组,因此它可以保存我游戏网格上的任何类型的对象,但仍然可以访问正确的字段并每次将指针递增足够多。

任何帮助表示赞赏。

4

3 回答 3

4

您可以创建一个指向基类的指针数组,它将“保存”您的任何实体,但您不能创建基类的数组并假设它也将保存您的子类,因为在C/C++,数组是固定长度的,每个元素是固定数量的。即使您使用了向量或其他东西,它仍然无法正常工作,因为每个元素都是纯粹的基类。

在 C++11 中,您可以使用元组,但它可能不是您想要的。我会使用指向基类的指针数组(或者更好的是,智能指针的容器类),并遍历它。

于 2012-04-12T21:18:58.997 回答
1

你不能有一系列不同的类。如果您尝试将派生类放入基类数组中,您将得到切片。您需要使用指向基类的指针数组。

于 2012-04-12T21:17:55.417 回答
1

您应该使用多态性,并对其使用 C++ 标准支持(使用虚拟基类迭代“实例”指针的容器)。

于 2012-04-12T21:18:07.313 回答