Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛР13-С++17-мая-2012.doc
Скачиваний:
13
Добавлен:
15.09.2019
Размер:
1.3 Mб
Скачать

1.3.4. Фактические параметры.

При обращении к функции ей передаются фактические параметры, то есть выражения, имеющие те реальные значения, с которыми функция отрабатывает очередной вызов. Другими словами, при вызове функция получает данные, с которыми фактически выполняется алгоритм функции при этом обращении.

1.4. Формальные и фактические параметры функции

В описании функции ее внешние данные названы формальными параметрами. Это название подчеркивает, что данные описания формальны, абстрактны, то есть не участвуют в реальных действиях, а только описывают взаимосвязь данных в теле функции. Формальные параметры функции — это всегда имена переменных. В заголовке функции они объявляются, поэтому и должны быть указаны вместе с типом.

При обращении к функции ей передаются фактические параметры. Это выражения, значения которых известны на момент обращения к функции, и с которыми функция отрабатывает очередной вызов. Фактические параметры подставляются на место формальных при каждом обращении к функции. Они могут быть в общем случае выражениями, то есть константами, переменными, или выражениями.

Тип параметров, их количество и порядок следования называются совместно «сигнатура параметров». Есть непреложное правило C: в описании функции и в обращении сигнатуры параметров должны строго совпадать. Это означает, что формальные и фактические параметры должны соответствовать друг другу по количеству, типу и порядку следования.

Пример 13.8

Пример описания функции, которая находит среднее арифметическое трех чисел. Иллюстрирует особенности, которые могут быть при обращении к функции, возвращающей значение. Показывает варианты обращения.

float Avg (float a, float b, float c)

{

float S; // локальная переменная

S = (a+b+c)/3.;

return S; // тип совпадает с типом функции

}

void main(void)

{

float x1 = 2.5, x2 = 7, x3 = 3.5;

float y;

// фактические параметры — переменные

y = Avg (x1, x2, x3); // обращение в присваивании

printf ("x1=%f, x2=%f, x3=%f y= %f\n", x1, x2, x3, y);

// фактические параметры — константы вещественного типа

y = Avg (2., 4., 7.);

printf ("x1=%f, x2=%f, x3=%f y= %f\n" , 2., 4., 7., y);

// фактические параметры — выражения

y = Avg (x1*2., x2+4., sin (PI/2.));

printf ("x1=%f, x2=%f, x3=%f, y= %f\n" , 2*x1, x2+4., sin (PI/2.), y);

// обращение в функции вывода. Фактические параметры — произвольные

// то есть константы, переменные, выражения

printf ("x1=%f, x2=%f, x3=%f y= %f\n" , 2., x2, x3+0.7, Avg (2., x2, x3 + 0.7);

// как выражение, оператор-обращение может входить в другие выражения

y = (Avg (0.5, 1.7, 2.9) + Avg (x1, x1+2, x1+2.)) * 0.5;

printf ("y= %f\n" ,y );

}

1.5. Описание и объявление функции. Прототип функции

С точки зрения структуры программы, в C все функции описываются на одном уровне. В терминах «описание» и «объявление» функции путаницы быть не должно.

Описание функции предоставляет программисту всю информацию о ней, как внешнюю (тип, имя, сигнатура параметров), так и внутреннюю (тонкости алгоритма). Если рассматривать функцию как данное конструируемого типа, то описание функции как раз и конструирует данный тип с указанным именем.

Объявление функции предоставляет только внешнюю (интерфейсную часть), для которой важно только умение правильно использовать функцию, то есть обратиться к ней. Заголовок (первая строка описания) функции как раз и предоставляет такую информацию.

Любой объект программы должен быть объявлен перед первым его использованием. Это непреложное правило относится и к функциям. Объявление или описание функции в программе должно появиться до первого обращения к ней.

Существует несколько способов объявления функций (рис. 13.1).

Объявление функций в С++

В одном файле с функцией main()

В отдельном файле

Перед main()

После main ()

файл *.срр

файлы *.h; *.срр

Рис. 13.1. Функции в С++

На рис. 13.1 показаны 4 способа объявления функций в языке программирования С++. Рассмотрим структуры объявления функций в одном файле, с главной функцией. Функции можно объявлять в двух областях, до начала функции main(), после функции main(). До сих пор мы объявляли функции  в одном файле, перед функцией main() - это самый простой из способов.