C ++将类的对象保留在数组中

时间:2013-06-18 23:08:19

标签: c++ objective-c++

我正在制作TD游戏,我想知道有没有办法保持不同类的数组对象。像下面的代码

class A(base class){
  int x,y;
}
class B:A{
}
class C:A{
}

main(){
A a;
B b;
C c;
array[3];
array[0] = B b[12];
array[1] = C c[12];
foo(array[1]);
}

我想要实现的是获取对象(我的地图上的怪物)来运行而不在功能中使用很多'ifs'。我只是想避免下面的代码。

if(All from B is dead)
 foo(C c[all elements])
else if(All from C is dead)
 foo(D d[all elements]);
etc.

并执行类似第一个代码的操作。

建议中的Thx。

Edzio

2 个答案:

答案 0 :(得分:0)

您可以使用std::vector<std::unique_ptr<Base>>或。来估计多态集合。 std::vector<std::shared_ptr<Base>>

请注意,向量的复制语义不好,但您可能根本不会复制该级别。如果需要,最简单的方法是创建自己的智能指针并使用如上所述。

更重要的方法是编写一个真正的,一流的多态容器。

答案 1 :(得分:0)

您可以查看支持多态性的各种STL容器,并选择适合您需求的容器。在这种情况下,如@Balog Pal所述,std :: vector可能是最佳选择。

以下是有关C ++ STL容器选项的一些质量信息:

http://www.cplusplus.com/reference/stl/