2013-04-02 51 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` 

是正確的答案?