2013-05-17 122 views
0

我要實現支持抽象的數字在多重繼承避免鑽石

收集的數據結構是數字集合

分類是一個有序集合

列表是數字列表集合(包括重複)

set是一個沒有dup的數字的集合。

鏈接和陣列是所保存的數據的格式(鏈接在堆意思漫射和陣列意思的存儲器contious量)

再就是類組合(即陣列稱爲ArrayList和等列表。在圖片)

一個簡單的UML:

uml3;

每個最後四個combinatios的(最後一排PIC

)需要實現一個方法調用進行排序,使作爲他們自己的墮落副本(返回Sorted類型)。我想創建4個新的類,從繼承排序和最後一行中的類(例如一個ArrayListSorted繼承自Sorted類和ArrayList類的類),但然後我有鑽石問題(在同一個前排序和ArrayList都是收集後代)

任何更好的主意?

+1

有一個共同的觀點,你應該[喜歡在組成繼承(http://stackoverflow.com/questions/49002/prefer-composition-over-遺產)。但是,根據您的實現語言,鑽石繼承模式不一定是問題。不尋常的,我不知道是否有人已經定義了基類,因爲他們可以,但如果你可以有多重繼承,你應該能夠處理鑽石繼承問題。 – Steve314

+0

爲什麼不只是在Collection類中添加Sorted *參數,每次調用sorted()時都會更新? – lucasg

+0

喬治,事情是,我不寫的主要功能。我被告知,主要他們期望排序後會返回一個Sorted對象 –

回答

1

在C++中,鑽石問題可以通過使用虛擬公共繼承來解決。隨着虛擬公有繼承基類繼承只有一次:

class A {...}; 
class B : virtual public A {...}; 
class C : virtual public A {...}; 
class D : public B, public C {...};