如何遍历不同类型的类数组

How to loop through an array of different types of classes

本文关键字:同类型 数组 何遍历 遍历      更新时间:2023-10-16

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

  • game_entity
  • 继承自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、生命值 = 25 的game_creature,

那么它将访问第二个game_creature对象的 x 和 y 为 5 和 25,这实际上是第一个game_creature的移动速度和生命值。

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

任何帮助,不胜感激。

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

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

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

你应该使用多态性,并使用C++标准支持(使用虚拟基类遍历"实例"指针的容器)。