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

Теоретический вопрос о перегрузке функций - C++

Восстановить пароль Регистрация
 
sergIKO
3 / 3 / 1
Регистрация: 20.01.2010
Сообщений: 91
20.01.2010, 16:09     Теоретический вопрос о перегрузке функций #1
Доброго времени суток!
Помогите, пожалуйста, вот с такой проблемой.

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
29
#include <iostream>
#include <conio.h>
using namespace std;
void xpo(float);
void xpo(int);
void xpo(char);
 
int main()
{
xpo(0.3); // почему когда здесь я задаю вещественное число компилятор выдает ошибку?
             // ведь как один из вариантов перегрузки у меня есть float функция?
 
xpo(3);   
xpo('=');
getch();
return 0;
}
void xpo(float n)
{
    cout<<"\nit\'s float   "<<n;
}
void xpo(int n)
{
    cout<<"\nit\'s integer  "<<n;
}
void xpo(char n)
{
    cout<<"\nit\'s char  "<<n;
}
спасибо!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Yurii_74
paladin
 Аватар для Yurii_74
279 / 179 / 3
Регистрация: 25.02.2009
Сообщений: 592
20.01.2010, 16:27     Теоретический вопрос о перегрузке функций #2
Исходя из того, что он тебе пишет, можно сделать вывод о том, что сам он не может выбрать нужную функцию. Если сделать явное преобразование, то ошибок не будет. Если вместо float использовать double, то все хорошо. Вывод: 0.3 воспринимается как double и может с одинаковым успехом восприниматься как float, int или char.
Metal_666_
15 / 15 / 2
Регистрация: 19.10.2009
Сообщений: 187
20.01.2010, 16:52     Теоретический вопрос о перегрузке функций #3
Тут бы не мешало виртуальные функции использывать, тогда железобетонно не должно возникнуть проблем
ISergey
Maniac
Эксперт С++
 Аватар для ISergey
1331 / 864 / 50
Регистрация: 02.01.2009
Сообщений: 2,622
Записей в блоге: 1
20.01.2010, 17:01     Теоретический вопрос о перегрузке функций #4
Тут бы не мешало виртуальные функции использывать

а это здесь при чем?
sergIKO
3 / 3 / 1
Регистрация: 20.01.2010
Сообщений: 91
20.01.2010, 17:39  [ТС]     Теоретический вопрос о перегрузке функций #5
Цитата Сообщение от Yurii_74 Посмотреть сообщение
Если вместо float использовать double, то все хорошо.
Да, действительно, заработало!
Цитата Сообщение от Yurii_74 Посмотреть сообщение
Вывод: 0.3 воспринимается как double и может с одинаковым успехом восприниматься как float, int или char.
А в чем же тогда смысл перегрузки (я имею ввиду с одинаковым количеством аргументов)? если, задавая функции с одним именем и разными типами, компилятор мне будет переводить все в один наивысший тип?
хотя например, если в принципе убрать вариант с вещественным аргументом, оставив только int и char, все работает.

p.s. по-поводу виртуальных функций...до этого я еще не дочитал
CheshireCat
Эксперт С++
2907 / 1235 / 78
Регистрация: 27.05.2008
Сообщений: 3,308
20.01.2010, 17:46     Теоретический вопрос о перегрузке функций #6
Проанализируй код:
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
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <iostream>
#include <conio.h>
using namespace std;
void xpo(float);
 void xpo(double);
void xpo(int);
void xpo(char);
 
int main()
{
xpo(0.3); // почему когда здесь я задаю вещественное число компилятор выдает ошибку?
             // ведь как один из вариантов перегрузки у меня есть float функция?
xpo(0.3f);   // <----------------
xpo(3);   
xpo('=');
getch();
return 0;
}
void xpo(float n)
{
        cout<<"\nit\'s float   "<<n;
}
void xpo(double n)
{
        cout<<"\nit\'s double   "<<n;
}
void xpo(int n)
{
        cout<<"\nit\'s integer  "<<n;
}
void xpo(char n)
{
        cout<<"\nit\'s char  "<<n;
}
 
/*
it's double   0.3
it's float   0.3
it's integer  3
it's char  =
*/
sergIKO
3 / 3 / 1
Регистрация: 20.01.2010
Сообщений: 91
20.01.2010, 18:01  [ТС]     Теоретический вопрос о перегрузке функций #7
так,что-то я запутался..
1)без f в конце комп-р не может понять,что это вещественное число? и таким же образом можно поставить d и ld (long double)?
2)это и есть явное преобразование? я знаю пока что только static_cast
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.01.2010, 20:51     Теоретический вопрос о перегрузке функций
Еще ссылки по теме:

C++ Теоретический вопрос по std::map
Вопрос о перегрузке ++/-- C++
Сколько используется параметров при перегрузке унарных операторов как френд-функций? C++

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

Или воспользуйтесь поиском по форуму:
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
20.01.2010, 20:51     Теоретический вопрос о перегрузке функций #8
Цитата Сообщение от sergIKO Посмотреть сообщение
А в чем же тогда смысл перегрузки (я имею ввиду с одинаковым количеством аргументов)? если, задавая функции с одним именем и разными типами, компилятор мне будет переводить все в один наивысший тип?
Что занчит "будет переводить все в один наивысший тип"? Читай Страуструпа "Язык программирования C++. Специальное издание" начиная с главы 7.4 и далее по теме.
Цитата Сообщение от sergIKO Посмотреть сообщение
и таким же образом можно поставить d и ld (long double)?
http://www.cplusplus.com/doc/tutorial/constants/
Yandex
Объявления
20.01.2010, 20:51     Теоретический вопрос о перегрузке функций
Ответ Создать тему
Опции темы

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