Я столкнулся с проблемой. В моем дереве иерархии C ++ у меня есть две ветви для сущностей разного характера, но с одинаковым поведением - с тем же интерфейсом. Я создал такие иерархические деревья (сначала на изображении ниже). И теперь я хочу работать с классами Item или Base независимо от их характера (первого или второго). Затем я создаю одну абстрактную ветку для этого использования. Мое сознание (второе на изображении ниже). Но это не работает. Схема работы кажется (третья на изображении ниже). Думаю, это плохая логика ... Есть ли у кого-нибудь идеи по поводу такого наследования иерархии? Как сделать логичнее? Более простой для понимания?
Извините за мой англо-русский интернет не помог :)
Обновление: вы просите меня быть более откровенным, и я отвечу.
В моем проекте (плагины для Adobe Framemaker) мне нужно работать с диалогами и элементами управления графическим интерфейсом. В некоторых местах я работаю с элементами управления WinAPI, а в других - с элементами управления FDK (внутренним создателем фреймов), но я хочу работать с тем же интерфейсом.
Я не могу использовать один базовый класс и наследовать от него другие, потому что все необходимые элементы управления - это дерево иерархии (а не один класс).
Итак, у меня есть одно дерево иерархии для элементов управления 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). Абстрактное дерево имеет только абсолютные абстрактные методы. Все наследование в абстрактном дереве виртуально. Связь от дерева реализаций к абстрактному виртуальна. На изображении для простоты показано только одно дерево реализаций.
Спасибо за помощь!
FirstBase
,FirstItem
,SecondBase
и т. Д. - person Marcelo Cantos   schedule 10.11.2010