избегая алмазов в множественном наследовании

я должен реализовать структуры данных, которые поддерживают абстрактные числа

Коллекция представляет собой набор чисел

отсортировано это отсортированная коллекция

список представляет собой список номеров (включая дубликаты)

набор представляет собой набор чисел без дублирования.

Linked и Array — это формат сохраненных данных (связанный означает diffuse в куче, а массив означает ограниченный объем памяти)

тогда есть комбинации классов (список, который является массивом, названным arraylist и т. д. на рисунке)

простой умл:

uml3;

Каждое из последних четырех объединений (последняя строка на рисунке) должно реализовывать сортированный вызов метода, который создает собственную отсортированную копию (возвращаемый тип Sorted). я подумал сделать 4 новых класса, которые наследуются от отсортированных и классов в последней строке (например, класс ArrayListSorted, которые наследуются от классов Sorted и ArrayList), но затем у меня возникла проблема с алмазом (в том же примере, отсортированный и ArrayList являются коллекционными потомками)

есть идея лучше для дизайна?

0

Решение

В C ++ проблема алмазов может быть решена с помощью виртуального публичного наследования. При виртуальном публичном наследовании базовый класс наследуется только один раз:

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

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector