Двоякий класс |
Здравствуйте, гость ( Вход | Регистрация )
Двоякий класс |
Litkevich Yuriy |
14.9.2018, 7:50
Сообщение
#1
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
Несколько раз, при написании программ, возникала проблема со структурой классов.
Допустим есть 3 класса: Круглый, Цветной, Умный, при этом Круглый и Цветной имеют общий базовый класс, в общем случае может быть как прямой так и через несколько классов (например, QObject) У класса Умный есть методы: Раскрывающийся текст добавитьЦветные(список<Цветной> цветные); установитьКруглый(Круглый круглый); Иногда требуется ещё один класс, который в программе ведёт себя двояко, то как Круглый, то как Цветной. Выходил из положения так (на примере Умного): Раскрывающийся текст добавитьЦветные(список<Цветной> цветные); добавитьЦветные(список<Двоякий> цветные); // перегруженный метод установитьКруглый(Круглый круглый); установитьКруглый(Двоякий круглый); // перегруженный метод Как бы так извернутся, чтобы получить Двоякий класс, который можно было бы применять и вместо Цветного и вместо Круглого, не создавая перегруженных версий функций у класса Умный? |
|
|
Iron Bug |
14.9.2018, 17:47
Сообщение
#2
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
ты лучше на примере кода покажи. на этих (особенно русскоязычных) примерах вообще непонятно, чего ты хочешь.
|
|
|
Алексей1153 |
15.9.2018, 11:30
Сообщение
#3
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
Litkevich Yuriy,
я так понимаю, возможные свойства класса - потомка следующие: 1) Круглый 2) Цветной 3) Умный 4) Круглый и Цветной. у них у всех четырёх должен быть общий предок. А потомки будут вести себя согласно заданным свойствам. |
|
|
Litkevich Yuriy |
18.9.2018, 6:17
Сообщение
#4
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
кроме 3-го пункта, Умный сам по себе.
Для абстрактной задачи общий предок сам по себе напрашивается, т.е. т.н. ромбовидное наследование: База -> Круглый База -> Цветной Круглый + Цветной -> Универсальный тогда Универсальный можно пихать в Умного и под видом круглого и под видом Цветного но может есть какой-нибудь шаблон (типовое решение) с иным подходом. Т.к. очень хочется использовать сигналы и слоты Qt для Круглого и Цветного или хотябы базового класса. А MOC не поддерживает множественное наследование от двух QObject-ов. |
|
|
Алексей1153 |
18.9.2018, 9:13
Сообщение
#5
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
А MOC не поддерживает и правильно делает! Я и так не люблю множественное наследование, с ним проблем можно огрести. Поэтому и предлагаю использовать "кирпичики", из которых любой потомок можно собрать, а сигналы в каждом потомке нужно разрулить вручную между кирпичиками |
|
|
Litkevich Yuriy |
19.9.2018, 13:36
Сообщение
#6
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
Litkevich Yuriy |
19.9.2018, 14:22
Сообщение
#7
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
а-а-а, допёр!
|
|
|
Текстовая версия | Сейчас: 22.11.2024, 5:26 |