Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Динамическая типизация
Форум на CrossPlatform.RU > Разработка > С\С++
jerdeks
Допустим, у нас есть классы Фигура, Эллипс и Прямоугольник. Я хочу создать класс ЭллипсИлиПрямоугольник, которому ну например в конструктор передаются константа, определяющая, кем ему быть.
Есть мысль сделать так:

class EllipseOrRectangle : Figure
{
public:
   EllipseOrRectangle(что-то, bool figure) {
      if (figure)
         Ellipse(что-то);
      else
         Rectangle(что-то);
   }
}


И даже работает, но потом мне надо определить, что же это за класс. Нет, можно конечно переменную завести, но может как-то красивее можно это сделать? Или может вообще то что я написал не правильно?
silver47
Если на этапе создание объекта Вы уже знаете его тип, то, как мне кажется, лучше и создавать прямоугольник или эллипс. Если у них большая часть методов сходны, если лишь небольшие различия, то создайте свой класс ФИГУРА, а эллипс и прямоугольник унаследуйте от него, переопределив некоторые методы, в которых есть различия. Это больше соответствует идеологии ООП, и добавлять новый фигуры будет проще.
jerdeks
silver47, так-то оно так, но у меня такой случай, что так удобнее :)
silver47
Ну тогда городите конструктор с булевым аргументом. Сделайте переменную типа classType и метод для ее получения getType().
Litkevich Yuriy
вроде в Boost'е уже есть готовое решение.
Sokoloff
Если сделать класс наследником от QObject, то можно использовать qobject_cast.
Litkevich Yuriy
Цитата(Sokoloff @ 18.9.2011, 12:00) *
Если сделать класс наследником от QObject
тема в разделе С++, стало быть Qt нет
Goliath
мне кажется здесь стоит вообще пойти немного другим путём, изменив немного архитектуру. Посмотрите паттерн "Абстрактная фабрика". Там как раз ваш случай рассматривается. Я вообще редко встречал подобное решение вашей проблемы.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.