2013-04-02 50 views
1

我在制作非常简单的游戏的过程,由此对象(元件A或B)在屏幕上飞行,碰撞等容器和派生类

A和B之间唯一的区别是颜色对象(A =黑色B =白色)。

有没有可能有一个元素容器容器(或20个元素)来容纳10个A和10个B的。我有一个环顾四周,如果我有一个A型或B型矢量,但不是混合物,我可以做到这一点。

任何帮助将不胜感激!谢谢 - 快乐迟来的复活节

KJ

编辑: 有许多不同的特点,A和B都已经,例如不同的速度,他们可以走动,以及不同的能力。 E,g A可以拍摄激光,但B不能。这就是为什么我使用不同的类。

+3

为什么你不把颜色作为课堂的一个属性?那么你只能脱离一门课。 – jrok

+1

如果唯一的区别是颜色,那么不同的类型是完全矫枉过正的。 – john

回答

4

C++容器是齐性的,意思是你不能在其中存储不同类型的对象。但是,您可以存储指向基本类型的指针,并使用两个派生的AB类。

但在你的情况下,如果唯一的区别是颜色,我没有看到有不同类别的理由。只要在课堂上有颜色属性。

如果你需要不同的类可以使用基类,如下所示:

class Base 
{ 
public: 
// base properties both classes share 
// virtual methods etc. 
}; 

class A : public Base 
{ 
public: 
// class A specific methods/properties 
}; 

class B : public Base 
{ 
public: 
// class B specific methods/properties 
}; 

现在你可以有基本对象指针的向量这些可以是A类型或B的。

std::vector<Base*> objects; 

A *a = new A(); 
B *b = new B(); 
objects.push_back(a); 
objects.push_back(b); 
+0

你可能想使用_smart_指针,比如'unique_ptr'或'shared_ptr'。 – dyp

+0

我很困惑,我将如何申报coinatainer。我会将它声明为元素吗?或者是'A'还是'B'? – KingJohnno

+0

@KingJohnno如示例所示:'std :: vector '。 –

0

如果你真的需要给不同的对象储存在容器中,然后可能:

`boost::any` 

是正确的答案?