![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
jerdeks |
![]()
Сообщение
#1
|
Новичок Группа: Новичок Сообщений: 6 Регистрация: 14.9.2011 Пользователь №: 2874 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Допустим, у нас есть классы Фигура, Эллипс и Прямоугольник. Я хочу создать класс ЭллипсИлиПрямоугольник, которому ну например в конструктор передаются константа, определяющая, кем ему быть.
Есть мысль сделать так:
И даже работает, но потом мне надо определить, что же это за класс. Нет, можно конечно переменную завести, но может как-то красивее можно это сделать? Или может вообще то что я написал не правильно? |
|
|
silver47 |
![]()
Сообщение
#2
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 356 Регистрация: 1.4.2010 Пользователь №: 1584 Спасибо сказали: 40 раз(а) Репутация: ![]() ![]() ![]() |
Если на этапе создание объекта Вы уже знаете его тип, то, как мне кажется, лучше и создавать прямоугольник или эллипс. Если у них большая часть методов сходны, если лишь небольшие различия, то создайте свой класс ФИГУРА, а эллипс и прямоугольник унаследуйте от него, переопределив некоторые методы, в которых есть различия. Это больше соответствует идеологии ООП, и добавлять новый фигуры будет проще.
Сообщение отредактировал silver47 - 16.9.2011, 13:12 |
|
|
jerdeks |
![]()
Сообщение
#3
|
Новичок Группа: Новичок Сообщений: 6 Регистрация: 14.9.2011 Пользователь №: 2874 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
silver47, так-то оно так, но у меня такой случай, что так удобнее
![]() |
|
|
silver47 |
![]()
Сообщение
#4
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 356 Регистрация: 1.4.2010 Пользователь №: 1584 Спасибо сказали: 40 раз(а) Репутация: ![]() ![]() ![]() |
Ну тогда городите конструктор с булевым аргументом. Сделайте переменную типа classType и метод для ее получения getType().
|
|
|
Litkevich Yuriy |
![]()
Сообщение
#5
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
вроде в Boost'е уже есть готовое решение.
|
|
|
Sokoloff |
![]()
Сообщение
#6
|
Участник ![]() ![]() Группа: Участник Сообщений: 237 Регистрация: 1.4.2009 Из: Москва Пользователь №: 654 Спасибо сказали: 50 раз(а) Репутация: ![]() ![]() ![]() |
Если сделать класс наследником от QObject, то можно использовать qobject_cast.
|
|
|
Litkevich Yuriy |
![]()
Сообщение
#7
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
Goliath |
![]()
Сообщение
#8
|
Новичок Группа: Новичок Сообщений: 5 Регистрация: 20.9.2011 Пользователь №: 2891 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
мне кажется здесь стоит вообще пойти немного другим путём, изменив немного архитектуру. Посмотрите паттерн "Абстрактная фабрика". Там как раз ваш случай рассматривается. Я вообще редко встречал подобное решение вашей проблемы.
|
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 13.5.2025, 21:20 |