我必须实现支持抽象数字的数据结构
Collection是一组数字
已排序是已排序的集合
list是一个数字列表集合(包括重复项)
set是一组没有dup的数字。
Linked和Array是保存数据的格式(链接意味着堆和数组中的扩散意味着一个连续的内存量)
然后有类的组合(图片中名为arraylist等的数组列表)
一个简单的uml:
最后四个组合中的每一个(图中的最后一行)需要实现一个方法调用,该方法调用自己的排序副本(返回Sorted类型)。我想要创建4个新的类,它们是来自sorted的继承和最后一行中的类(例如,一个从Sorted类和ArrayList类继承的ArrayListSorted类),但后来我遇到了钻石问题(在同一个例子中。排序和ArrayList都是Collection offspring)
任何更好的设计理念?
答案 0 :(得分:1)
在C ++中,钻石问题可以通过使用虚拟公共继承来解决。使用虚拟公共继承,基类只继承一次:
class A {...};
class B : virtual public A {...};
class C : virtual public A {...};
class D : public B, public C {...};