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

时间:2012-04-12 21:13:41

标签: c++ arrays inheritance pointers

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

  • game_entity
  • game_creature,继承自game_entity

我打算让更多的类继承自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,那么它将访问第二个game_creature对象的x和y为5并且25,这实际上是第一个游戏生物的移动和健康。

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

感谢任何帮助。

3 个答案:

答案 0 :(得分:4)

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

在C ++ 11中,你可以使用一个元组,但它可能不是你想要的。我会使用一个指针数组(或者更好的是,一个容器类的智能指针)到基类,并迭代它。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

你应该使用多态,并使用C ++标准支持(使用虚拟基类来遍历“instance-of”-pointers'容器)。