如何遍历不同类型的类数组
How to loop through an array of different types of classes
我的 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对象中的前两个整数。
那么它将访问第二个game_creature对象的 x 和 y 为 5 和 25,这实际上是第一个game_creature的移动速度和生命值。
我认为这是因为指针指向"game_entity"的x和y的内存实际上是"game_creature"的移动速度和健康状况所在。但是,我不知道如何制作一个game_entities数组,因此它可以容纳我的游戏网格上的任何类型的对象,但仍然可以让它访问正确的字段并每次将指针增加足够多。
任何帮助,不胜感激。
您可以创建一个指向基类的指针数组,这将"保存"您的任何实体,但您不能创建基类的数组并假设它也会保存您的子类,因为在 C/C++ 中,数组是固定长度的,每个元素都是固定数量的。 即使你使用向量或其他东西,它仍然不起作用,因为每个元素都是纯粹的基类。
在 C++11 中,您可以使用元组,但这可能不是您要查找的内容。 我会使用一个指向基类的指针数组(或者更好的是,智能指针的容器类),并遍历它。
你不能有一个不同类的数组。 如果您尝试将派生类放入基类数组中,您将获得切片。 您需要使用指向基类的指针数组。
你应该使用多态性,并使用C++标准支持(使用虚拟基类遍历"实例"指针的容器)。
- C++默认情况下,指针类型数组的元素是否保证初始化为 nullptr?
- 类型数组?
- 如何在使用 make_unique<T[]>() 制作的模板类型数组上使用 std::fill?
- 将基本类型数组中的内存重新用于不同(但仍然是基本)类型的数组合法吗
- 在C++中返回基元类型数组(Java比较)
- 如何返回 QVariant 类型数组
- 如何在本机 c++ jni 中实现 java 类型数组
- 模板类型数组的模板类型数组
- 如何确定未知类型数组的索引是否为空
- 复杂类型数组的静态初始化
- 访问基类型数组成员(Int-to-type习惯用法)
- 如何将 char 类型数组传递给函数并将第一个字符数组复制到第二个图表数组并使用 c++ 进行比较
- 如何在C 中制作结构类型数组
- 如何创建结构类型数组的地图对象
- C++类类型数组
- C++中的Matlab类型数组
- 节点C++插件 - 当类型数组(Float32Array)作为参数传递时,如何访问它?
- 如何将二维字符类型数组逐行保存到 c 中的.txt文件中
- C++:用户定义的类型数组出错
- 在双精度类型数组中使用 memset()