Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/2: Рейтинг темы: голосов - 2, средняя оценка - 4.50
4 / 4 / 1
Регистрация: 20.01.2010
Сообщений: 93
1

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

20.01.2010, 16:09. Просмотров 493. Ответов 7
Метки нет (Все метки)


Доброго времени суток!
Помогите, пожалуйста, вот с такой проблемой.

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;
}
спасибо!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.01.2010, 16:09
Ответы с готовыми решениями:

Шаблоны. Теоретический вопрос.
Приветствую всех! Суть вопроса в следующем: известно, что для шаблонного класса невозможно...

Скорее теоретический вопрос
Здравствуйте! я написала программу,которая работает с длинууующими числами. но важна не только...

Теоретический вопрос по std::map
Всем привет. Подскажите пожалуйста как std::map резервирует память и как в памяти выглядят его...

Теоретический вопрос. ( метод класса)
Допускается ли при описании класса и его методов, ситуация когда один метод вызывает другой...

7
paladin
285 / 185 / 7
Регистрация: 25.02.2009
Сообщений: 589
20.01.2010, 16:27 2
Исходя из того, что он тебе пишет, можно сделать вывод о том, что сам он не может выбрать нужную функцию. Если сделать явное преобразование, то ошибок не будет. Если вместо float использовать double, то все хорошо. Вывод: 0.3 воспринимается как double и может с одинаковым успехом восприниматься как float, int или char.
0
15 / 15 / 5
Регистрация: 19.10.2009
Сообщений: 187
20.01.2010, 16:52 3
Тут бы не мешало виртуальные функции использывать, тогда железобетонно не должно возникнуть проблем
0
Maniac
Эксперт С++
1452 / 953 / 159
Регистрация: 02.01.2009
Сообщений: 2,815
Записей в блоге: 1
20.01.2010, 17:01 4
Тут бы не мешало виртуальные функции использывать

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

p.s. по-поводу виртуальных функций...до этого я еще не дочитал
0
Эксперт С++
2919 / 1268 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
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  =
*/
0
4 / 4 / 1
Регистрация: 20.01.2010
Сообщений: 93
20.01.2010, 18:01  [ТС] 7
так,что-то я запутался..
1)без f в конце комп-р не может понять,что это вещественное число? и таким же образом можно поставить d и ld (long double)?
2)это и есть явное преобразование? я знаю пока что только static_cast
0
1998 / 1598 / 488
Регистрация: 31.05.2009
Сообщений: 2,990
20.01.2010, 20:51 8
Цитата Сообщение от sergIKO Посмотреть сообщение
А в чем же тогда смысл перегрузки (я имею ввиду с одинаковым количеством аргументов)? если, задавая функции с одним именем и разными типами, компилятор мне будет переводить все в один наивысший тип?
Что занчит "будет переводить все в один наивысший тип"? Читай Страуструпа "Язык программирования C++. Специальное издание" начиная с главы 7.4 и далее по теме.
Цитата Сообщение от sergIKO Посмотреть сообщение
и таким же образом можно поставить d и ld (long double)?
http://www.cplusplus.com/doc/tutorial/constants/
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.01.2010, 20:51

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Вопрос о перегрузке ++/--
Рассмотрим простой пример постфиксной и префиксной операции инкремента: int main() { int i=0;...

Ошибка при перегрузке функций
Помогите, пожалуйста. Вылетает ошибка floating point stack check на строчке 16 кода (код ниже)....

Теоретический вопрос
Является ли правильной константа: &quot;false&quot; ? Если да, то какого она типа?

Теоретический вопрос.
допустим у меня есть функция Func(short X, short Y) { short Rez=0; Rez = X*Y; } Вопрос,...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.