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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
Tiami
Яростный кот
 Аватар для Tiami
-4 / 1 / 1
Регистрация: 10.03.2009
Сообщений: 220
#1

Что опять не так в функции? - C++

30.03.2009, 12:34. Просмотров 1381. Ответов 26
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
using namespace std;
void power(char='*',int=1,float=7);
int main()
{
    cout<<power('*');
    cout<<power(34.51);
    cout<<power(37);
    cout<<power();
}
void power(char ch,int x,float y)
{
                     for(int j=1;j<50,j++)
                     cout<<ch;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Haster
инженер-системотехник
 Аватар для Haster
109 / 108 / 2
Регистрация: 10.03.2009
Сообщений: 533
30.03.2009, 12:42     Что опять не так в функции? #2
Т.к. у тебя все параметры в функции используются по умолчанию, то вызов функции с одним аргументом всегда заменяет только первый параметр...
соответственно, power(32.51); сругается на ощибку, ибо компилятор не может преобразовать double к char
Deicider
 Аватар для Deicider
96 / 52 / 1
Регистрация: 18.03.2009
Сообщений: 273
30.03.2009, 12:42     Что опять не так в функции? #3
Tiami, всё не так.

Ты объявляешь функцию с тремя параметрами, а когда вызываешь, передаешь только один, притом еще разных типов, или вообще не передаешь ничего.
Второе: чтобы задать значения параметров по умолчанию, нужно в объявлении функции написать имена переменных:
void power(char ch='*', int x=1, float y=7);

Вызывая такую функцию, можно будет передавать значения только типа char для первого параметра, int для второго и float для третьего. Ты же передаешь разные типы для первого параметра.
Третье: функция не возвращает значения (объявлена как void), но ты пытаешься вывести на экран возвращаемое значение ( cout<<power() ), которого не существует.

И еще одно замечание: ты в функции не используешь, ни x, ни y. зачем они тогда нужны? ))))
Humanitis
 Аватар для Humanitis
172 / 164 / 6
Регистрация: 12.01.2009
Сообщений: 430
30.03.2009, 12:43     Что опять не так в функции? #4
Цитата Сообщение от Tiami Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
using namespace std;
void power(char='*',int=1,float=7);
int main()
{
    cout<<power('*');//power('*',1,7)
    cout<<power(34.51);//power(char(34.51),1,7)
    cout<<power(37);//power(char(37),1,7)
    cout<<power();//power('*',1,7)
}
void power(char ch,int x,float y)
{
                     for(int j=1;j<50,j++)
                     cout<<ch;
}
Перегружай функцию
Haster
инженер-системотехник
 Аватар для Haster
109 / 108 / 2
Регистрация: 10.03.2009
Сообщений: 533
30.03.2009, 12:45     Что опять не так в функции? #5
Deicider полностью прав ))
Deicider
 Аватар для Deicider
96 / 52 / 1
Регистрация: 18.03.2009
Сообщений: 273
30.03.2009, 12:50     Что опять не так в функции? #6
Цитата Сообщение от Humanitis Посмотреть сообщение
Перегружай функцию
Даже если перегружать, то тоже осторожно использовать надо, так как при передаче в функцию целого числа со значением от 0 до 255, оно по сути может соответствовать и типу char, и int, и float, а свыше 255 до (не помню точно какого ), может быть как int и float.
Tiami
Яростный кот
 Аватар для Tiami
-4 / 1 / 1
Регистрация: 10.03.2009
Сообщений: 220
30.03.2009, 12:52  [ТС]     Что опять не так в функции? #7
Странно а я думал функция автоматически определяет тип аргумента....
Deicider
 Аватар для Deicider
96 / 52 / 1
Регистрация: 18.03.2009
Сообщений: 273
30.03.2009, 12:53     Что опять не так в функции? #8
Цитата Сообщение от Tiami Посмотреть сообщение
Странно а я думал функция автоматически определяет тип аргумента....
Она-то определяет, но я пишу про то, что есть значения, которым может соответствовать несколько типов.
Tiami
Яростный кот
 Аватар для Tiami
-4 / 1 / 1
Регистрация: 10.03.2009
Сообщений: 220
30.03.2009, 12:54  [ТС]     Что опять не так в функции? #9
Цитата Сообщение от Humanitis Посмотреть сообщение
#

#include <iostream>

#

using namespace std;

#

void power(char='*',int=1,float=7);

#

int main()

#

{

#

cout<<power('*');//power('*',1,7)

#

cout<<power(34.51);//power(char(34.51),1,7)

#

cout<<power(37);//power(char(37),1,7)

#

cout<<power();//power('*',1,7)

#

}

#

void power(char ch,int x,float y)

#

{

#

for(int j=1;j<50,j++)

#

cout<<ch;

#

}
Пишет одну ошибочку:
1. expected `;' before ')' token
Humanitis
 Аватар для Humanitis
172 / 164 / 6
Регистрация: 12.01.2009
Сообщений: 430
30.03.2009, 12:55     Что опять не так в функции? #10
Deicider, Думаю тут не будет проблем при перегрузке.
Литерал 0..255 по умолчанию будет типом int
Литерал записанный в кавычках,будет типом char
и соответсвенно для float,записанный через точку.

Другое дело если мы будем подставлять в функцию типы отличные от перечисленных.
например short int или double
Tiami
Яростный кот
 Аватар для Tiami
-4 / 1 / 1
Регистрация: 10.03.2009
Сообщений: 220
30.03.2009, 12:57  [ТС]     Что опять не так в функции? #11
Цитата Сообщение от Haster Посмотреть сообщение
Т.к. у тебя все параметры в функции используются по умолчанию, то вызов функции с одним аргументом всегда заменяет только первый параметр...
соответственно, power(32.51); сругается на ощибку, ибо компилятор не может преобразовать double к char
Я думал она сразу приравняет к типу float))
Deicider
 Аватар для Deicider
96 / 52 / 1
Регистрация: 18.03.2009
Сообщений: 273
30.03.2009, 13:03     Что опять не так в функции? #12
Сейчас задумался над своим сообщением насчет типов. А можно ли целое число без запятых перепутать с float? Или если нет запятой, то это точно будет int? подскажите, кто знает! ))

Насчет char и int всё что я написал остается в силе, так как char это однобайтовая целочисленная беззнаковая переменная.

Добавлено через 2 минуты 56 секунд
Tiami,
Может быть тут проблема: for(int j=1;j<50,j++). Нужно через ; записывать.
Haster
инженер-системотехник
 Аватар для Haster
109 / 108 / 2
Регистрация: 10.03.2009
Сообщений: 533
30.03.2009, 13:03     Что опять не так в функции? #13
Есть схема, которой следует компилятор при работе с типами...
Как я помню, тип float по умолчанию не приводится к типу int....
При всех операциях тип char автоматически расширяется до int...
float до double....

А вот преобразование int во float осуществляется без проблем, т.к. не связано с потерей точности
Humanitis
 Аватар для Humanitis
172 / 164 / 6
Регистрация: 12.01.2009
Сообщений: 430
30.03.2009, 13:21     Что опять не так в функции? #14
Цитата Сообщение от Haster Посмотреть сообщение
При всех операциях тип char автоматически расширяется до int...
float до double....
этож с чего вдруг?
Deicider
 Аватар для Deicider
96 / 52 / 1
Регистрация: 18.03.2009
Сообщений: 273
30.03.2009, 13:28     Что опять не так в функции? #15
Цитата Сообщение от Tiami Посмотреть сообщение
Я думал она сразу приравняет к типу float))
Она не приравняет к типу float, потому что первый параметр имеет тип char.
Haster
инженер-системотехник
 Аватар для Haster
109 / 108 / 2
Регистрация: 10.03.2009
Сообщений: 533
30.03.2009, 13:49     Что опять не так в функции? #16
Цитата:
Сообщение от Haster Посмотреть сообщение
При всех операциях тип char автоматически расширяется до int...
float до double....
этож с чего вдруг?
Это лучше у Страуструпа спросить )))
Но если есть выражение:
char t;
t = t+1;
то t автоматически расширяется до типа int, к числу прибавляется 1, а потом выражение усекается опять до char (при присваивании)
Humanitis
 Аватар для Humanitis
172 / 164 / 6
Регистрация: 12.01.2009
Сообщений: 430
30.03.2009, 13:51     Что опять не так в функции? #17
Цитата Сообщение от Haster Посмотреть сообщение
t = t+1;
то t автоматически расширяется до типа int, к числу прибавляется 1, а потом выражение усекается опять до char (при присваивании)
это потому ,что 1 считается литералом типа int,поэтому и идет продвижение char до int.
Haster
инженер-системотехник
 Аватар для Haster
109 / 108 / 2
Регистрация: 10.03.2009
Сообщений: 533
30.03.2009, 13:53     Что опять не так в функции? #18
Хорошо, не удачный пример взял )))
Допустим:
char t = '0';
t = t+ '1';
в данном случае опять же t расширяется до int, '1' тоже до int, выполняется вычисление, а затем результат опять переводится в char
Humanitis
 Аватар для Humanitis
172 / 164 / 6
Регистрация: 12.01.2009
Сообщений: 430
30.03.2009, 14:01     Что опять не так в функции? #19
Ну может я и ошибаюсь.
Но я всегда думал,что тип char и тип int будут расширятся до того размера с которым удобнее оперировать системе,т.е. в 16-разрядной до слова,в 32-х до двойного слова.
Однако не факт ,что тип int будет равен 32 битам в 32 разрядной системе.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.03.2009, 14:05     Что опять не так в функции?
Еще ссылки по теме:

Не работает strcmp + указатели непойми что опять выводят C++
C++ При решении программа выдаёт значение функции, равное 0 или выдаёт ошибку. Что не так?
Что не так в функции? Написать функцию вставки элемента в массив C++
C++ Найти решение заданной функции. Что делаю не так?
C++ Что не так в этой функции?

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

Или воспользуйтесь поиском по форуму:
Haster
инженер-системотехник
 Аватар для Haster
109 / 108 / 2
Регистрация: 10.03.2009
Сообщений: 533
30.03.2009, 14:05     Что опять не так в функции? #20
Не помню где я это вычитал, у Страуструпа или у Айрона Пола, но там было написано, что всегда типы char и short расширяются до int
Yandex
Объявления
30.03.2009, 14:05     Что опять не так в функции?
Ответ Создать тему
Опции темы

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