| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Для новичков > полиморфный ввод |
| Автор: nvb 10.4.2012, 13:10 |
| Программа, если поступает значение, заносит его в стек, если управляющий символ - вызывает функции. подскажите, как лучше полиморфизм реализовать, что бы в зависимости от типа данных вызывались разыные функции?писть switch или if else не хотелось бы.есть смысл здесь делать полиморфный класс? |
| Автор: mes 10.4.2012, 14:25 |
| не очень понял задачу, но вот на скорую руку накалякал, может поможет : http://liveworkspace.org/code/52bac8fe4ba63d583ac668be89ebe761 |
| Автор: nvb 10.4.2012, 14:40 |
| ну здесь, как я понял, циклы и перебо значений, с целью проверить что у нас на входе. а я говорил о функции или шаблоне, которая в зависимости от того, что на входе -int,float или char вызывает соответсвующий метод. как-то наверно с помошью шаблонов и специализаций должно делаться, просто определенно не могу понять как. |
| Автор: mes 10.4.2012, 14:42 |
на входе в каком виде у вас ? если типизированное значение, то чем не устраивает простая прегрузка ?! Добавлено через 1 минуту и 37 секунд нет, цикл для генереации значений на входе, а выбор происходет благодаря карте соответсвий.. т.е. просто переход, никакого перебора.. Добавлено через 2 минуты и 53 секунды прежде чем понять "как", надо определиться с "что есть" и "что получить" |
| Автор: nvb 10.4.2012, 14:56 |
| значения стандартных типов на входе. перегрузка чего? перегрузить оператор тут не пулучится видимо: istream & operator >> (istream & s, somedata & data) тип данных скажем float data при вводе 'a' получим 0, насколько я понимаю. и анализ возращаемого значения тут не сделать. если просто некую функцию read перегружать, то вводимое значение нужно сперва кудато сохранить, что бы в функцию передать, а тип ее заранее не известен. прошу прощения, несколько смутно излагаю.) |
| Автор: borisbn 10.4.2012, 14:56 |
| http://liveworkspace.org/code/a03df1a7f871128fa6e8caa8b8a5c526 но можно и через шаблоны... лучше поточнее объясни задачу. лучше целиком, а не отрывками |
| Автор: nvb 10.4.2012, 15:04 |
| алгоритм такой примерно: ввод если int или float - значение в соответствующий стек если управляющий символ - соответсвующее действие- завершение программы, печать, вызов функции и пр. повторяем ввод так вот еще раз сформулирую вопрос: как такой ввод лучще оформить, при том, что неизвестно, введет оператор символ или числовое значение? я думал как это сделать полиморфно и не придумал) |
| Автор: nvb 10.4.2012, 15:12 |
| mes, я понимаю, я поэтому и написал, что нужно тогда вспомогательную переменную вводить, но тогда какого типа - непонятно |
| Автор: mes 10.4.2012, 15:12 |
| в принципе вариантов чтения с потока всего 2 , 1. согласованный.. когда вы точно знаете что сейчас в потоке и это читаете 2. вариантный.. когда читаете вариант (в нашем случае строку) и по внешнему виду определяете что с ним делать.. |
| Автор: borisbn 10.4.2012, 15:14 |
| nvb, если я тебя правильно понял, то тебе нужно получить из стандартного ввода строку, а затем уже понять, к чему эту строку можно преобразовать - к int, float или любой другой char. Если так, то тебе ни полиморфизм, ни шаблоны не помогут, т.к. входной тип один - строка. Прийдётся проверять на возможность приведения к каждому типу по-очереди. Добавлено через 6 минут и 45 секунд nvb, если это - не задание в институте, то посмотри на другие языки (python, php и т.п.). Там такой проблемы нет. почти... |
| Автор: nvb 10.4.2012, 15:25 |
| вот я об этом как раз: т.е. все-таки через строку делать? некак с помощью полиморфизма не сделть? borisbn, не, но написать надо на с... интерпретируемые да, проще конечно |
| Автор: mes 10.4.2012, 15:32 |
чтоб сработал полиморфизм, нужен тип, а его нет, есть только набор сырых данных.. если б среди данных были бы управляющие команды, можно было бы опереться на них.. в общем без точки опоры, рычаг приложить не к чему |
| Автор: Albor 10.4.2012, 16:37 |
| Задача очень похожа на калькулятор, описываемый Стауструпом. |