2012-02-03 52 views
1

最近這一直在困擾着我。假設我有一個基類Base。如果我在Base之上有多個派生類,比如DerivedA和DerivedB,則深層副本會變得很痛苦。在派生類上執行深層複製

OtherClass(const OtherClass & _rhs) 
{ 
    //I have a list of Base *, now I must assign a class id to each derived class to properly create a new one. 
    //... 
} 

有什麼辦法來解決這個問題?

+1

設計得更好。最小的耦合,最大的內聚力。 – 2012-02-03 22:36:18

+0

我不覺得有什麼辦法來重組它。我有一個充滿了瓷磚的地形類。不同的瓷磚行爲會有所不同。我還要如何複製地形類? – lowq 2012-02-03 22:41:56

+0

取決於你的瓷磚做什麼。例如,如果它們主要由行爲構成,而不是狀態,那麼您可能無需在該圖塊每次存在於世界中時實例化一個Tile子類的一個實例:您可以簡單地引用單個共享實例。如果你的Tiles需要狀態,但是它對每個tile都是一樣的狀態,那麼你可以將這個狀態從Tile類中取出。 – 2012-02-03 22:57:58

回答

9

你應該在你的基類定義了一個克隆方法:

virtual Base * clone() const = 0; 

每一個派生類中實現該克隆方法:

virtual DerivedA * clone() const { 
    return new DerivedA(*this); 
} 

那麼你OtherClass只是要迭代,並調用clone方法在每個實例Base*在您的列表中。

+0

這是一個好主意。 – lowq 2012-02-03 22:49:25