|
Модераторы: bsa |
|
marknew |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 13.1.2008 Репутация: нет Всего: нет |
Приветствую! Необходимо написать две версии общей функции get_number таким образом, чтобы функция get_number могла быть использована для целого числа или для числа с плавающей точкой, как потребуется. Функция должна принимать числовой аргумент, определяющий значение по умолчанию. Для приведенного вызова: get_number(0) функция должна возвращать целочисленное значение, тогда как get_number(0.0) должна возвращать значение типа double. Для этого нам нужно перегрузить две версии функции, одна из которых принимает и возвращает значение типа int, а другая принимает и возвращает значение типа double.
По отдельности, у меня получилось написать работоспособный код: Вариант 1 (для целых чисел).
Вариант 2 (для double).
Собственно, вопрос заключается в том, как объединить эти две версии в одну? Пока у меня не получается даже скомпилировать такой код.. Никак не могу понять, как в данном случае правильно осуществить вызов функции после введения числа? Что я должен указывать в аргументах, если я заранее не знаю, какое будет введено число int\double?
|
||||||
|
|||||||
xvr |
|
|||
Эксперт Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
В вашем задании нет ни слова о том, что вызов функции будет после введения числа. Равно как и нет требования, что бы конкретная функция выбиралась в процессе исполнения программы после введения числа. |
|||
|
||||
marknew |
|
|||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 13.1.2008 Репутация: нет Всего: нет |
Наверное, я не совсем корректно написал, попробую переформулировать. Да это не то чтобы для задания, просто я самостоятельно, по книжке, пытаюсь разобраться, поэтому, заранее приношу свои извинения, за возможно тупые вопросы. Что нужно добавить, чтобы конкретная функция выбиралась в процессе исполнения программы после введения числа? Ну и собственно остается актуальным мой изначальный вопрос - Как объединить эти мои две версии в одну работоспособную программу? Достаточно ли для этого перегрузки функции, либо этого мало и требуется что то еще? |
|||
|
||||
vpf |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 119 Регистрация: 14.11.2016 Где: Moscow Репутация: нет Всего: нет |
Перегрузка работает только по входным аргументам. Вы же пытаетесь перегрузить функцию по выходу, как перегрузка это не работает.
Если у функции нет аргументов, но требуется разный тип результата, нужно делать разные функции. |
|||
|
||||
marknew |
|
||||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 13.1.2008 Репутация: нет Всего: нет |
Ок, с этим более-менее понятно.
Вот это не совсем ясно. Я попробовал дать разные имена функциям и не использовать перегрузку, но это не особо помогло.. Если не сложно, могли бы вы написать эти две функции, которые я мог бы использовать в контексте моего примера? |
||||
|
|||||
vpf |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 119 Регистрация: 14.11.2016 Где: Moscow Репутация: нет Всего: нет |
Попробую завтра, пока скажу так, допустим есть две функции getInt() и getDouble() одна возвращает int, другая double.
Вы ввели число в виде строки. Проверяете по regexp формат числа в виде "\d+" если совпадает, значит введено целое число, вызываете getInt если не совпадает вызываете getDouble() Как вариант, если с regexp проблемы, просто сделать поиск "." (точки) если есть, значит вызвать getDouble(), нет getInt(). |
|||
|
||||
marknew |
|
||||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 13.1.2008 Репутация: нет Всего: нет |
Был бы очень благодарен!
Хорошо, попробую копнуть в этом направлении.. Это сообщение отредактировал(а) marknew - 30.4.2017, 20:59 |
||||
|
|||||
vpf |
|
||||
Шустрый Профиль Группа: Участник Сообщений: 119 Регистрация: 14.11.2016 Где: Moscow Репутация: нет Всего: нет |
Вариант обычный.
Вариант с функциями и разными значениями возврата Это сообщение отредактировал(а) vpf - 1.5.2017, 08:46 |
||||
|
|||||
marknew |
|
||||||||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 13.1.2008 Репутация: нет Всего: нет |
Спасибо, но, к сожалению, у меня оба варианта при компиляции выдают ошибки.. Компилятор ругается вот на эту строчку:
Error 1 error C2668: 'sqrt': ambiguous call to overloaded function 2 IntelliSense: more than one instance of overloaded function "sqrt" matches the argument list Использую Visual C++ 2010 Express. |
||||||||
|
|||||||||
vpf |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 119 Регистрация: 14.11.2016 Где: Moscow Репутация: нет Всего: нет |
||||
|
||||
marknew |
|
|||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 13.1.2008 Репутация: нет Всего: нет |
Сейчас посмотрю, в принципе, тему можно считать закрытой, т.к. нашлось более подходящее решение, достаточно было к моей изначальной версии всего то лишь добавить нужный аргумент (при вызове get_number). Но, в любом случае, спасибо вам за предоставление альтернативного варианта кода! |
|||
|
||||
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |