Я столкнулся с проблемой. В моем дереве иерархии C ++ у меня есть две ветви для сущностей разной природы, но одно и то же поведение - один и тот же интерфейс. Я создал такие деревья иерархии (сначала на изображении ниже).
И теперь я хочу работать с классами Item или Base независимо от их природы (первый или второй). Затем я создаю одну абстрактную ветку для этого использования. Мой разум построить (второй на изображении ниже).
Но это не работает. Схема работы кажется (третий на изображении ниже).
Это плохая логика, я думаю ...
У кого-нибудь есть идеи по поводу такого иерархического наследования? Как сделать это более логичным? Более простой для понимания?
Изображение
Извините за мой англо - русский интернет не помогло:)
Обновление:
Вы просите меня быть более явным, и я буду.
В моем проекте (плагины для Adobe Framemaker) мне нужно работать с диалогами и элементами управления GUI. В некоторых местах я работал с элементами управления WinAPI, а в некоторых других местах - с элементами управления FDK (внутренний Framemaker), но я хочу работать с тем же интерфейсом.
Я не могу использовать один базовый класс и наследовать от него другие, потому что все необходимые элементы управления - это иерархическое дерево (а не один класс).
Итак, у меня есть одно дерево иерархии для элементов управления WinAPI, одно для FDK и одно абстрактное дерево для использования любого элемента управления.
Например, есть элемент управления Edit (реализация WinEdit и FdkEdit), элемент управления Button (реализация WinButton и FdkButton) и базовый объект - Control (реализация WinControl и FdkControl).
На данный момент я могу связать свои классы в деревьях реализации (Win и Fdk) с наследованием между каждым из них (WinControl - базовый класс для WinButton и WinEdit; FdkControl - базовый класс для FdkButton и FdkEdit). И я могу ссылаться на абстрактные классы (Control - базовый класс для WinControl и FdkControl; Edit - базовый класс для WinEdit и FdkEdit; Button - базовый класс для WinButton и FdkButton). Но я не могу связать свое абстрактное дерево - компилятор ругается.
На самом деле у меня есть два дерева иерархии, которые я хочу унаследовать от другого.
Обновление:
Я сделал этот квест! :)
Я использовал виртуальное наследование и получил такую схему (http://img12.imageshack.us/img12/7782/99614779.png). Абстрактное дерево имеет только абсолютные абстрактные методы. Все наследования в абстрактном дереве являются виртуальными. Ссылка от дерева реализации к абстрактному является виртуальной. На изображении для простоты показано только одно дерево реализации.
Спасибо за помощь!