![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| jerdeks |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 14.9.2011 Репутация: нет Всего: нет |
Допустим, у нас есть классы Фигура, Эллипс и Прямоугольник. Я хочу создать класс ЭллипсИлиПрямоугольник, которому ну например в конструктор передаются константа, определяющая, кем ему быть.
Есть мысль сделать так:
И даже работает, но потом мне надо определить, что же это за класс. Нет, можно конечно переменную завести, но может как-то красивее можно это сделать? Или может вообще то что я написал не правильно? |
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
использовать полиморфизм.
хотя в данном примере совершенно непонятно, что такое "эллипс или прямоугольник". чем они отличаются от других фигур? и вообще, что бы предметно об этом рассуждать нужно знать что есть Figure, т.е. каков интерфейс. думаю лучше решение типа такого:
Добавлено @ 12:57 посмотри тут Это сообщение отредактировал(а) baldina - 16.9.2011, 12:59 |
|||
|
||||
| ZVano |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 259 Регистрация: 11.12.2006 Где: Украина, Кривой Р ог Репутация: нет Всего: 4 |
-------------------- НЕ ФЛУДИМ. Пользуемся кнопками "+" или "-" для выражения своего отношения к теме или сообщению. Гуглим "Как правильно задавать вопросы" |
|||
|
||||
| jerdeks |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 14.9.2011 Репутация: нет Всего: нет |
Пофиг, что такое эллипс и прямоугольник (ну только не сказал, что они от фигуры наследуются, но вроде и так понятно), пофиг чем они отличаются, пофиг какой интерфейс у фигуры. Вопрос же не об этом ZVano
Первая же мысль:
В той ветки перетирают из пустого в порожнее, а результат такой же. |
||||||
|
|||||||
| newbee |
|
|||
![]() Бревно ![]() ![]() Профиль Группа: Участник Сообщений: 703 Регистрация: 24.8.2011 Репутация: 4 Всего: 19 |
Omg. Какой же смысл наследоваться, если потом в вызывающем коде приходится плясать со switch-ами?
Добавлено через 2 минуты и 19 секунд jerdeks, используй решение baldina. Если где-то нужно будет определить, чем именно является фигура, воспользуйся dynamic_cast. -------------------- You're face to face With man who sold the world |
|||
|
||||
| ZVano |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 259 Регистрация: 11.12.2006 Где: Украина, Кривой Р ог Репутация: нет Всего: 4 |
Не толко можно, а нужно. код Нужно добавить виртуальный деструктор в базовый класс и станет доступен dynamic_cast.
Ответ там есть.
-------------------- НЕ ФЛУДИМ. Пользуемся кнопками "+" или "-" для выражения своего отношения к теме или сообщению. Гуглим "Как правильно задавать вопросы" |
||||||
|
|||||||
| jerdeks |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 14.9.2011 Репутация: нет Всего: нет |
Хм.. вроде действительно надо как у baldin'a сделать. Но прийдется от родителя наследоваться. А может можно ещё как-нибудь?
ZVano, щас над твоим подумаю Это сообщение отредактировал(а) jerdeks - 16.9.2011, 13:30 |
|||
|
||||
| newbee |
|
|||
![]() Бревно ![]() ![]() Профиль Группа: Участник Сообщений: 703 Регистрация: 24.8.2011 Репутация: 4 Всего: 19 |
-------------------- You're face to face With man who sold the world |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
в такой абстрактной задаче есть только два варианта 1. отразить типы на идентификатор 2. отразить типы на интерфейс для обоих вариантов С++ имеет уже некоторые встроенные средства, но если их не хватает можно и похимичить.. а вот какая химия лучше всего подойдет, зависит от конкретики задачи.. |
|||
|
||||
| jerdeks |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 14.9.2011 Репутация: нет Всего: нет |
Ну я решил проблемку. Но вот все равно вот такой вопрос, уже теоретический - может ли в си++ объект из себя превратиться в кого-то другого?
|
|||
|
||||
| ZVano |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 259 Регистрация: 11.12.2006 Где: Украина, Кривой Р ог Репутация: нет Всего: 4 |
Запросто. При помощи явного приведения типа. Но ничего хорошего из этого не получится -------------------- НЕ ФЛУДИМ. Пользуемся кнопками "+" или "-" для выражения своего отношения к теме или сообщению. Гуглим "Как правильно задавать вопросы" |
|||
|
||||
| jerdeks |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 14.9.2011 Репутация: нет Всего: нет |
Я хочу чтобы объект сам себе превращал 8-)
Ну пофантазирую:
|
|||
|
||||
| ZVano |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 259 Регистрация: 11.12.2006 Где: Украина, Кривой Р ог Репутация: нет Всего: 4 |
ХЗ. Я еще недостаточно С++ знаю - от него можно ожидать чего угодно, такой уж он монстрище Посмотрим, что ГУРУ скажут. -------------------- НЕ ФЛУДИМ. Пользуемся кнопками "+" или "-" для выражения своего отношения к теме или сообщению. Гуглим "Как правильно задавать вопросы" |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
можно.. смотрите рaзмещающий new.. но о том, достаточно ли места для объекта другого типа, в этом случае заботится программист.. Это сообщение отредактировал(а) mes - 16.9.2011, 17:08 |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Ваш код:
|
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |