Форум программистов, компьютерный форум CyberForum.ru

Перезагрузка функции - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
Vlad_fractal
 Аватар для Vlad_fractal
0 / 0 / 0
Регистрация: 16.10.2013
Сообщений: 78
18.10.2013, 11:54     Перезагрузка функции #1
Используя перегрузку функций, написать
программу определения знака переменных разного типа.
Заранее спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.10.2013, 11:54     Перезагрузка функции
Посмотрите здесь:

Перезагрузка компьютера C++
Перезагрузка operator - C++
Перезагрузка операций C++
перезагрузка >> C++
Перезагрузка операций C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Петррр
 Аватар для Петррр
5916 / 3353 / 333
Регистрация: 28.10.2010
Сообщений: 5,926
18.10.2013, 11:58     Перезагрузка функции #2
C++
1
2
3
4
5
6
7
8
9
10
11
signed char sign(int i)
{
    return i >= 0 ? 1 : -1;
}
 
signed char sign(double d)
{
    return d >= 0 ? 1 : -1;
}
 
// etc
Vlad_fractal
 Аватар для Vlad_fractal
0 / 0 / 0
Регистрация: 16.10.2013
Сообщений: 78
18.10.2013, 12:04  [ТС]     Перезагрузка функции #3
Спасибо, но можно ещё добавить комментарии к коду(//), чтобы я мог переиначить её на свой лад.
Folko
 Аватар для Folko
265 / 253 / 7
Регистрация: 27.09.2013
Сообщений: 877
Записей в блоге: 1
18.10.2013, 12:14     Перезагрузка функции #4
Vlad_fractal, какие комментарии? Просто объявляются 2 функции с одинаковыми именами и разными входными параметрами. В строке return проверяется, положительное или отрицательное число, и возвращается либо 1 либо -1. При вызове функции программа определяет нужный вариант функции

C++
1
2
3
4
5
6
7
8
9
signed char sign(int i) // входной параметр типа int
{
    return i >= 0 ? 1 : -1; // проверка и возвращение результата
}
 
signed char sign(double d) // входной параметр типа double
{
    return d >= 0 ? 1 : -1; // проверка и возвращение результата
}
Vlad_fractal
 Аватар для Vlad_fractal
0 / 0 / 0
Регистрация: 16.10.2013
Сообщений: 78
18.10.2013, 12:17  [ТС]     Перезагрузка функции #5
Ага... ладно, разберусь.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
18.10.2013, 12:18     Перезагрузка функции #6
Пишите сразу шаблонную
C++
1
2
3
4
5
template <class T>
int sign( T t )
{
    return t < 0 ? -1 : 1;
}
Петррр, в чем сакральный смысл использования signed char?
Vlad_fractal
 Аватар для Vlad_fractal
0 / 0 / 0
Регистрация: 16.10.2013
Сообщений: 78
18.10.2013, 12:41  [ТС]     Перезагрузка функции #7
Цитата Сообщение от Tulosba Посмотреть сообщение
Пишите сразу шаблонную
Спасибо, но не выйдет, у нас в лаб.аудиториях кастрированный С++, такой код он не принимает, только самое простое, типа этого:
C++
1
2
3
#include <iostream.h>
int s(int a, int b)
{return (a*b);}
Добавлено через 13 минут
Цитата Сообщение от Петррр Посмотреть сообщение
i >= 0 ? 1 : -1
Я правильно понимаю, что вместо этого, можно использовать if?
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5549 / 2563 / 233
Регистрация: 01.11.2011
Сообщений: 6,334
Завершенные тесты: 1
18.10.2013, 12:46     Перезагрузка функции #8
Цитата Сообщение от Vlad_fractal Посмотреть сообщение
Я правильно понимаю, что вместо этого, можно использовать if?
Да. Альтернатива if (.) {.} (тернарный оператор)
Код
i >= 0 ? 1 : -1
C++
1
2
3
4
if(i >= 0)
  return  1;
else 
  return -1;
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
18.10.2013, 12:46     Перезагрузка функции #9
Цитата Сообщение от Vlad_fractal Посмотреть сообщение
Я правильно понимаю, что вместо этого, можно использовать if?
Можно.
C++
1
q ? a : b;
равносильно
C++
1
2
if( q ) a;
else b;
Vlad_fractal
 Аватар для Vlad_fractal
0 / 0 / 0
Регистрация: 16.10.2013
Сообщений: 78
18.10.2013, 13:01  [ТС]     Перезагрузка функции #10
Так, хорошо...
ещё вопрос, этот код из сообщения 2 целый, там main не нужен?

Добавлено через 10 минут
Короче вот, что я намутил:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
int a(int i)
{
if(i>=0)
return  1;
else 
return -1;
}
float b(float j)
{
if(j>= 0)
return  1;
else 
return -1;
}
выдаёт ошибку, связанную с main. Куда его нужно впихнуть?
Помогите, пожалуйста, бедному гуманитарию получить автомат и забыть всё это, наконец, как страшный сон!
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.10.2013, 13:04     Перезагрузка функции #11
Цитата Сообщение от Vlad_fractal Посмотреть сообщение
там main не нужен?
main() всегда нужен.

Добавлено через 3 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream>
#include <cstdlib>
using namespace std;
 
int a(int i)
{
    if(i>=0)
    return  1;
    else 
    return -1;
}
 
float b(float j)
{
    if(j>= 0)
    return  1;
    else 
    return -1;
}
 
int main()
{
    cout << a(3) << endl;
    cout << b(4.5) << endl;
 
    system("pause");
    return 0;
}
Vlad_fractal
 Аватар для Vlad_fractal
0 / 0 / 0
Регистрация: 16.10.2013
Сообщений: 78
18.10.2013, 13:14  [ТС]     Перезагрузка функции #12
alsav22, отлично!
отшлифовал, вроде работает, только вопрос:
C++
1
2
3
cout<<a(3)<< endl;
cout<< b(4.5)<< endl;
}
Я знаю, что endl- переход в др. строку. А что значат (3), (4.5)?
У выдаёт дву единицы, в столбик, это удовлетворяет условию задачи?

Добавлено через 4 минуты
А-а-а-а! Всё, всё! Я всё понял, там целочисленный и вещественный. Короче ясно, можно ещё ввод от руки сделать. Ну всё, спасибо всем, пойду получать автомат.
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5549 / 2563 / 233
Регистрация: 01.11.2011
Сообщений: 6,334
Завершенные тесты: 1
18.10.2013, 13:14     Перезагрузка функции #13

Не по теме:

Цитата Сообщение от Vlad_fractal Посмотреть сообщение
отшлифовал, вроде работает
А то у alsav22 вечно код какой-то угловатый.



Цитата Сообщение от Vlad_fractal Посмотреть сообщение
А что значат (3), (4.5)?
Это числа: три и четыре с половиной, передающиеся в соответствующие функции.
Vlad_fractal
 Аватар для Vlad_fractal
0 / 0 / 0
Регистрация: 16.10.2013
Сообщений: 78
18.10.2013, 13:19  [ТС]     Перезагрузка функции #14
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Это числа: три и четыре с половиной, передающиеся в соответствующие функции.
Да, там ещё в этом фрагменте:
C++
1
2
3
4
if(j>= 0)
 return  j*1; //вместо просто 1
 else 
 return j*(-1);
И тогда, вроде, всё идеально, по условию. Вообщем, посмотрим, что препод скажет.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.10.2013, 13:24     Перезагрузка функции #15
Цитата Сообщение от Vlad_fractal Посмотреть сообщение
И тогда, вроде, всё идеально, по условию.
Всё, как раз, неправильно тогда.
Vlad_fractal
 Аватар для Vlad_fractal
0 / 0 / 0
Регистрация: 16.10.2013
Сообщений: 78
18.10.2013, 13:27  [ТС]     Перезагрузка функции #16
Цитата Сообщение от alsav22 Посмотреть сообщение
Всё, как раз, неправильно тогда.
Уже понял...
Так, при компиляции выдаёт две цифры в столбик. Не зависимо от знака, выдаёт положительные числа. Препод сказал переделывать, окей.
Как правильно написать? Тот вариант с единицами был верный?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.10.2013, 13:32     Перезагрузка функции #17
Цитата Сообщение от Vlad_fractal Посмотреть сообщение
Тот вариант с единицами был верный?
В общем, да.

Добавлено через 3 минуты
Добавьте только обработку возвращаемого функциями результата:
C++
1
if (a(n) == 1) cout << "Число положительное" << endl;
и т.д.
Vlad_fractal
 Аватар для Vlad_fractal
0 / 0 / 0
Регистрация: 16.10.2013
Сообщений: 78
18.10.2013, 13:34  [ТС]     Перезагрузка функции #18
Добавлено через 50 секунд
Цитата Сообщение от alsav22 Посмотреть сообщение
Добавьте только обработку возвращаемого функциями результата:
Ага, понял, спасибо.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.10.2013, 13:46     Перезагрузка функции #19
А теперь главное: тут нет перегрузки функций. Функции должны быть с одним именем.

Добавлено через 2 минуты
И лучше возвращать булево значение (раз проверка на знак).
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.10.2013, 13:54     Перезагрузка функции
Еще ссылки по теме:

полиморфизм,виртуальные функции, перезагрузка ф-ции C++
Переопределение или перезагрузка функции C++
C++ Перезагрузка

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
18.10.2013, 13:54     Перезагрузка функции #20
Цитата Сообщение от alsav22 Посмотреть сообщение
И лучше возвращать булево значение (раз проверка на знак).
в классическом (математическом) исполнении всё таки должно возвращаться три значения (-1,0,+1) для отрицательных, нуля и положительных чисел соответственно.
Yandex
Объявления
18.10.2013, 13:54     Перезагрузка функции
Ответ Создать тему
Опции темы

Текущее время: 05:39. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru