Название: Динамическая типизация, как-то так Отправлено: jerdeks от Сентябрь 16, 2011, 12:47 Допустим, у нас есть классы Фигура, Эллипс и Прямоугольник. Я хочу создать класс ЭллипсИлиПрямоугольник, которому ну например в конструктор передаются константа, определяющая, кем ему быть.
Есть мысль сделать так: Код
И даже работает, но потом мне надо определить, что же это за класс. Нет, можно конечно переменную завести, но может как-то красивее можно это сделать? Или может вообще то что я написал не правильно? Название: Re: Динамическая типизация, как-то так Отправлено: ddrtn от Сентябрь 16, 2011, 12:56 Абстрактная фабрика.
в википедии: http://ru.wikipedia.org/wiki/%D0%90%D0%B1%D1%81%D1%82%D1%80%D0%B0%D0%BA%D1%82%D0%BD%D0%B0%D1%8F_%D1%84%D0%B0%D0%B1%D1%80%D0%B8%D0%BA%D0%B0_%28%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD_%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F%29 Название: Re: Динамическая типизация, как-то так Отправлено: alexman от Сентябрь 16, 2011, 13:08 может как-то красивее можно это сделать? Куда уж красивее? Название класса Код: EllipseOrRectangle Название: Re: Динамическая типизация, как-то так Отправлено: jerdeks от Сентябрь 16, 2011, 13:23 Это все смехуечки. Да и правильное название. Отражает суть, как ему и положено
Почитал про фабрику. Ни к селу, ни к городу она тут Название: Re: Динамическая типизация, как-то так Отправлено: Rem Norton от Сентябрь 16, 2011, 13:47 У всех потомков QObject есть 2 замечательных метода:
Код
Скорее всего это как раз подойдет: никаких доп. переменных и вся инфа есть. Название: Re: Динамическая типизация, как-то так Отправлено: Странник от Сентябрь 16, 2011, 14:16 как вы собираетесь использовать класс EllipseOrRectangle? почему бы не создать абстрактный класс фигуры, унаследовать от него Ellipse и Rectangle и пользоваться себе виртуальными методами и прочими cast'ами?
Название: Re: Динамическая типизация, как-то так Отправлено: jerdeks от Сентябрь 16, 2011, 14:39 Лень три наследования делать вместо одного :)
Название: Re: Динамическая типизация, как-то так Отправлено: alexman от Сентябрь 16, 2011, 14:49 Это называется через зад.
Название: Re: Динамическая типизация, как-то так Отправлено: Igors от Сентябрь 16, 2011, 15:24 И даже работает, но потом мне надо определить, что же это за класс. Нет, можно конечно переменную завести, но может как-то красивее можно это сделать? Или может вообще то что я написал не правильно? Сохраните флажок figure в члене класса и добавьте метод IsEllipse возвращающий этот флажок. С именами переменных мрачно - ну если задуман эллипс, то почему флажок figure (да еще и базовый класс есть Figure)?Ничего плохого/неграмотного нет, просто обычно делают не так: все общее сваливают в базовый класс (Figure) и порожденные классы занимаются только своими делами. Но возможна и до. ситуация: напр класс задуман для чего-то другого и что рисовать (эллипс или прямоугольник) - дело десятое, проще решить флажком. Название: Re: Динамическая типизация, как-то так Отправлено: jerdeks от Сентябрь 16, 2011, 16:14 С именами переменных мрачно - ну если задуман эллипс, то почему флажок figure (да еще и базовый класс есть Figure)? Это абстрактный пример, задачка по-сложнее и там все адекватно называется :)Но возможна и до. ситуация: напр класс задуман для чего-то другого и что рисовать (эллипс или прямоугольник) - дело десятое. Именно!Название: Re: Динамическая типизация, как-то так Отправлено: jerdeks от Сентябрь 16, 2011, 16:16 Это называется через зад. Гипер активный житель, вы всегда такой гиперактивный? Название: Re: Динамическая типизация, как-то так Отправлено: alexman от Сентябрь 16, 2011, 20:23 Лень три наследования делать вместо одного :) А ты всегда такой ленивый? |