2013-10-15 60 views
1

我正在進行遊戲/模擬,並處理管理遊戲中的所有生物。 有一個基類生物,不同種類的生物從中繼承遺傳。靜態對象池和構造函數的繼承?

在這段代碼的早期版本中,我只是使用基類作爲任何給定生物的通用基類,我有一個私有的靜態向量,如果你願意的話,所有生物都存在遊戲。這由生物的構造者處理,將新生物的地址添加到堆棧中。夠簡單。

當我介紹繼承時,我在哪裏得到精神障礙。如果我繼續調整生物類作爲基類(將矢量移動到受保護的狀態,我會想象?),然後從那裏定義一些猴子,熊和老虎的任意子類......當我創建一個一個繼承自Creature的類,它是否也會被添加到Creature父類中的指針向量中?也許更直接的是,創建這些子類之一的實例是否也會調用父類的構造函數?

我是否有正確的思路,或者我需要做些什麼來實現這種行爲? 如果需要,我可以提供更具體的細節。

謝謝。

-

我以這種方式做事情的想法,例如圖形。這樣我就可以循環所有存在的生物並通過多態性調用函數對每個生物返回他們的精靈,XY位置等。

+0

在需要工廠模式的? http://sourcemaking.com/design_patterns/abstract_factory/cpp/1 – Arunmu

回答

1

這絕對有效,只要你的矢量商店指針Creature*而不是Creature在你的std::vector裏面。否則object slicing會發生以來,矢量儲備只是生物和子類的每一個附加特徵中的空間被丟棄

關於構造函數調用堆棧是相當簡單:

class A { 
    private: 
    int aField; 
    public: 
    A(int aField) : aField(aField) { } 
}; 

class B : public A { 
    private: 
    int bField; 
    public: 
    B(int aField, int bField) : A(aField), bField(bField) { } 
}; 
+0

是啊!我在Creature中把它叫做矢量 creatureStack;一個指向Creatures的指針數組。 非常感謝。我一定會保存該代碼的副本以供參考。 :) – user2717676

+0

請注意,如果您必須管理'Creature'實例的許多分配和釋放,那麼自定義內存池可能非常方便以避免堆碎片。你將不得不解決這樣的事實,即亞類具有不同的尺寸,但如果你通過互聯網搜索的話,那麼它就有很多。 – Jack