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