Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.03.2008, 15:01   #1
and277
Пользователь
 
Регистрация: 07.03.2008
Сообщений: 31
По умолчанию Почему так? Знач. по умолч. у функции

Разъясните пожалуйста работу данной программы:

Код:
#include <iostream>
using namespace std;

int VolumeCube(int length, int width=25, int height=1);

int main()
{
	int length = 100;
	int width = 50;
	int height = 2;
	int volume;

	volume = VolumeCube(length, width, height);
	cout << "First volume equals: " << volume << "\n";

	volume = VolumeCube(length, width);
	cout << "Second time volume equals: " << volume << "\n";

	volume = VolumeCube(length, height);
	
	cout << "Third time volume equals: " << volume << "\n";
	return 0;
}

VolumeCube(int length, int width, int height)
{
	return (length * width * height);
}

При выполнении выдает Third time volume equals: 200

Не могу понять - Почему функции VolumeCube не передалось значение width=25? И результат был бы 5000

Может ктонибудь прокомментирует этот код с учебника?
and277 вне форума Ответить с цитированием
Старый 10.03.2008, 15:32   #2
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

А где вы такой код взяли? Может в третьем случае там всё-таки было:
Код:
	volume = VolumeCube(length);
? От того, какие "слова" в функцию передать, ничего не изменится, в данном случае всё равно первый и второй аргумент - явные, третий - неявный.
B_N вне форума Ответить с цитированием
Старый 10.03.2008, 17:51   #3
and277
Пользователь
 
Регистрация: 07.03.2008
Сообщений: 31
По умолчанию

B_N ты прав код я изменил... и столкнулся с странной вещьююю. Мне не совсем понятной
and277 вне форума Ответить с цитированием
Старый 10.03.2008, 18:18   #4
alexx777
Пользователь
 
Регистрация: 20.02.2008
Сообщений: 75
По умолчанию

Цитата:
Сообщение от and277 Посмотреть сообщение
Мне не совсем понятной
Что не понятно?
alexx777 вне форума Ответить с цитированием
Старый 11.03.2008, 16:07   #5
and277
Пользователь
 
Регистрация: 07.03.2008
Сообщений: 31
По умолчанию

alexx777
Не могу понять - Почему функции VolumeCube не передалось значение width=25? И результат был бы 5000
and277 вне форума Ответить с цитированием
Старый 11.03.2008, 16:24   #6
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Еще раз
Задано:
int VolumeCube(int length, int width=25, int height=1);

Мы передаем фактические параметры. Как уже говорилось имеет значение только порядок их следования, а не имя:

volume = VolumeCube(length, height); // length=100, height = 2

внутри функции в соответствии с порядком:

length = 100, width=2, height=1 - только height по умолчанию

Вот если можно было-бы (Не помню, допускает ли C пропуск одного параметра)

volume = VolumeCube(length, , height);

тогда width = 25
alexBlack вне форума Ответить с цитированием
Старый 11.03.2008, 19:41   #7
and277
Пользователь
 
Регистрация: 07.03.2008
Сообщений: 31
По умолчанию

alexBlack , вот интересует последнее выражение!

Первые 2- понятно.

но ведь volume = VolumeCube(length, , height);
Third time volume equals: 200

Тоесть 25 вообще в умножении потом не учавствует.
return (length * width * height);
width тут не 25! Его вообще нет. Чему он вообще тут равен тогда?
and277 вне форума Ответить с цитированием
Старый 11.03.2008, 22:39   #8
Rembo
Форумчанин
 
Аватар для Rembo
 
Регистрация: 29.10.2007
Сообщений: 628
По умолчанию

Когда Вы передаете функции volume = VolumeCube(length, height); тоесть length, height, то получается что в самой функции return (length * width * height);
length = length, а width получается равен height и равен 2, ну а height по умолчанию (int height=1 это когда вы функции объявляли) равен 1 => 100 * 2 * 1 = 200 Поэтому то и выводится 200... Но возможно я и не прав, так что не вините...

Последний раз редактировалось Rembo; 11.03.2008 в 22:41.
Rembo вне форума Ответить с цитированием
Старый 12.03.2008, 00:00   #9
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Цитата:
Сообщение от and277 Посмотреть сообщение
alexBlack , вот интересует последнее выражение!

Первые 2- понятно.

но ведь volume = VolumeCube(length, , height);
Third time volume equals: 200

Тоесть 25 вообще в умножении потом не учавствует.
return (length * width * height);
width тут не 25! Его вообще нет. Чему он вообще тут равен тогда?
Когда Вы пишете
Код:
volume = VolumeCube(length, width);
, функция вызывается как
VolumeCube(length, width, 1); или VolumeCube(100, 50, 1);
А когда
Код:
volume = VolumeCube(length, height);
, то вызывается
VolumeCube(length, height, 1); или VolumeCube(100, 2, 1);
B_N вне форума Ответить с цитированием
Старый 14.03.2008, 17:53   #10
and277
Пользователь
 
Регистрация: 07.03.2008
Сообщений: 31
По умолчанию

B_N, спасибо за помощь. Сейчас мне понятно, но раньше я почему то обращал внимание на имя параметра, а не на позицию. Хз
and277 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Почему у мну ошибка??? Altera Общие вопросы Delphi 4 09.03.2008 09:29
почему не находит??? vipER Общие вопросы C/C++ 1 26.09.2007 14:26
Почему? Sota О форуме и сайтах клуба 4 26.07.2007 16:26
Почему так? Сильванович Михаил Общие вопросы C/C++ 2 03.07.2007 11:57
Обьясните почему так... malevich Общие вопросы Delphi 5 10.02.2007 17:29