![]() |
|
Модераторы: bsa |
![]()
|
|
| nvb |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 31.1.2012 Репутация: нет Всего: нет |
Программа, если поступает значение, заносит его в стек, если управляющий символ - вызывает функции.
подскажите, как лучше полиморфизм реализовать, что бы в зависимости от типа данных вызывались разыные функции?писть switch или if else не хотелось бы.есть смысл здесь делать полиморфный класс? |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
не очень понял задачу, но вот на скорую руку накалякал, может поможет :
http://liveworkspace.org/code/52bac8fe4ba6...ac668be89ebe761 |
|||
|
||||
| nvb |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 31.1.2012 Репутация: нет Всего: нет |
ну здесь, как я понял, циклы и перебо значений, с целью проверить что у нас на входе. а я говорил о функции или шаблоне, которая в зависимости от того, что на входе -int,float или char вызывает соответсвующий метод. как-то наверно с помошью шаблонов и специализаций должно делаться, просто определенно не могу понять как.
|
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
на входе в каком виде у вас ? если типизированное значение, то чем не устраивает простая прегрузка ?! Добавлено через 1 минуту и 37 секунд нет, цикл для генереации значений на входе, а выбор происходет благодаря карте соответсвий.. т.е. просто переход, никакого перебора.. Добавлено через 2 минуты и 53 секунды прежде чем понять "как", надо определиться с "что есть" и "что получить" |
|||
|
||||
| nvb |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 31.1.2012 Репутация: нет Всего: нет |
значения стандартных типов на входе. перегрузка чего? перегрузить оператор тут не пулучится видимо:
istream & operator >> (istream & s, somedata & data) тип данных скажем float data при вводе 'a' получим 0, насколько я понимаю. и анализ возращаемого значения тут не сделать. если просто некую функцию read перегружать, то вводимое значение нужно сперва кудато сохранить, что бы в функцию передать, а тип ее заранее не известен. прошу прощения, несколько смутно излагаю.) |
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 21 Всего: 135 |
http://liveworkspace.org/code/a03df1a7f871...6e8caa8b8a5c526
но можно и через шаблоны... лучше поточнее объясни задачу. лучше целиком, а не отрывками -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| nvb |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 31.1.2012 Репутация: нет Всего: нет |
алгоритм такой примерно:
ввод если int или float - значение в соответствующий стек если управляющий символ - соответсвующее действие- завершение программы, печать, вызов функции и пр. повторяем ввод так вот еще раз сформулирую вопрос: как такой ввод лучще оформить, при том, что неизвестно, введет оператор символ или числовое значение? я думал как это сделать полиморфно и не придумал) |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
почитайте что есть поток данных.. без этого вам трудно будет даже самомусебе разъяснить, чего Вы хотите.. в потоке нет никаких типизированных данных, это всего лишь массив байтов, и поэтому разделять значения по их типу (за его отсустсвием) не получится.. |
|||
|
||||
| nvb |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 31.1.2012 Репутация: нет Всего: нет |
mes, я понимаю, я поэтому и написал, что нужно тогда вспомогательную переменную вводить, но тогда какого типа - непонятно
|
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
в принципе вариантов чтения с потока всего 2 ,
1. согласованный.. когда вы точно знаете что сейчас в потоке и это читаете 2. вариантный.. когда читаете вариант (в нашем случае строку) и по внешнему виду определяете что с ним делать.. |
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 21 Всего: 135 |
nvb, если я тебя правильно понял, то тебе нужно получить из стандартного ввода строку, а затем уже понять, к чему эту строку можно преобразовать - к int, float или любой другой char.
Если так, то тебе ни полиморфизм, ни шаблоны не помогут, т.к. входной тип один - строка. Прийдётся проверять на возможность приведения к каждому типу по-очереди. Добавлено через 6 минут и 45 секунд nvb, если это - не задание в институте, то посмотри на другие языки (python, php и т.п.). Там такой проблемы нет. почти... -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| nvb |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 31.1.2012 Репутация: нет Всего: нет |
вот я об этом как раз: т.е. все-таки через строку делать? некак с помощью полиморфизма не сделть?
borisbn, не, но написать надо на с... интерпретируемые да, проще конечно |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
чтоб сработал полиморфизм, нужен тип, а его нет, есть только набор сырых данных.. если б среди данных были бы управляющие команды, можно было бы опереться на них.. в общем без точки опоры, рычаг приложить не к чему |
|||
|
||||
| Albor |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 589 Регистрация: 28.2.2009 Репутация: 2 Всего: 9 |
Задача очень похожа на калькулятор, описываемый Стауструпом.
|
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |