Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Двоякий класс
Форум на CrossPlatform.RU > Разработка > С\С++
Litkevich Yuriy
Несколько раз, при написании программ, возникала проблема со структурой классов.

Допустим есть 3 класса:
Круглый, Цветной, Умный, при этом Круглый и Цветной имеют общий базовый класс, в общем случае может быть как прямой так и через несколько классов (например, QObject)

У класса Умный есть методы:
Раскрывающийся текст
добавитьЦветные(список<Цветной> цветные);
установитьКруглый(Круглый круглый);



Иногда требуется ещё один класс, который в программе ведёт себя двояко, то как Круглый, то как Цветной.
Выходил из положения так (на примере Умного):
Раскрывающийся текст
добавитьЦветные(список<Цветной> цветные);
добавитьЦветные(список<Двоякий> цветные); // перегруженный метод
установитьКруглый(Круглый круглый);
установитьКруглый(Двоякий круглый); // перегруженный метод


Как бы так извернутся, чтобы получить Двоякий класс, который можно было бы применять и вместо Цветного и вместо Круглого, не создавая перегруженных версий функций у класса Умный?
Iron Bug
ты лучше на примере кода покажи. на этих (особенно русскоязычных) примерах вообще непонятно, чего ты хочешь.
Алексей1153
Litkevich Yuriy,

я так понимаю, возможные свойства класса - потомка следующие:

1) Круглый
2) Цветной
3) Умный
4) Круглый и Цветной.

у них у всех четырёх должен быть общий предок. А потомки будут вести себя согласно заданным свойствам.
Litkevich Yuriy
кроме 3-го пункта, Умный сам по себе.

Для абстрактной задачи общий предок сам по себе напрашивается, т.е. т.н. ромбовидное наследование:
База -> Круглый
База -> Цветной
Круглый + Цветной -> Универсальный

тогда Универсальный можно пихать в Умного и под видом круглого и под видом Цветного

но может есть какой-нибудь шаблон (типовое решение) с иным подходом.
Т.к. очень хочется использовать сигналы и слоты Qt для Круглого и Цветного или хотябы базового класса. А MOC не поддерживает множественное наследование от двух QObject-ов.
Алексей1153
Цитата(Litkevich Yuriy @ 18.9.2018, 8:17) *
А MOC не поддерживает

и правильно делает!

Я и так не люблю множественное наследование, с ним проблем можно огрести. Поэтому и предлагаю использовать "кирпичики", из которых любой потомок можно собрать, а сигналы в каждом потомке нужно разрулить вручную между кирпичиками
Litkevich Yuriy
Цитата(Алексей1153 @ 18.9.2018, 11:13) *
"кирпичики", из которых любой потомок можно собрать
не понял.
Litkevich Yuriy
а-а-а, допёр!
:)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.