Инструменты пользователя

Инструменты сайта


examination:oop:question18

18. Функции: семантика, номенклатура, определение и объявление. Программирование функций: построение определений и объявлений, их размещение в программе, вызов функции. Переопределение функций.

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

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

int sum(int a, int b, int c);
 
int sum(int a, int b, int c) - определение функции
{
     int result;
     result = a + b + c;
     return result;
}

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

Аргументы a, b и c называются формальными параметрами. Это переменные, которые определены в теле функции (т.е. к ним можно обращаться только внутри фигурных скобок). При написании определения функции программа не знает их значения. При вызове функции вместо них подставляются фактические параметры – значения, с которыми функция вызывается.

Перегрузка

В языке Си++ допустимо иметь несколько функций с одним и тем же именем (перегрузка имен функций), потому что функции различаются не только по именам, но и по типам аргументов. Если в дополнение к определенной выше функции sum, мы определим еще одну функцию с тем же именем

double sum(double a, double b, double c)
{
     double result;
     result = a + b + c;
     return result;
}

это будет считаться новой функцией.

В следующем фрагменте программы в первый раз будет вызвана первая функция, а во второй раз – вторая:

int x, y, z, i_res;
double p,q,s, d_res;
//. . .
i_res = sum(x,y,z); // вызвать первое определение функции sum
d_res = sum(p,q,s); // вызвать второе определение функции sum

При первом вызове функции sum все фактические аргументы имеют тип int. Поэтому вызывается первая функция. Во втором вызове все аргументы имеют тип double, соответственно, вызывается вторая функция. Важен не только тип аргументов, но и их количество.

При объявлении функций в языке Си++ имеется возможность задать значения аргументов по умолчанию. Первый случай применения этой возможности языка – сокращение записи. Если функция вызывается с одним и тем же значением аргумента в 99% случаев, и это значение достаточно очевидно, можно задать его по умолчанию. Предположим, функция expnt возводит число в произвольную целую положительную степень. Чаще всего она используется для возведения в квадрат. Ее объявление можно записать так:

double expnt (double x, unsigned int e = 2);
examination/oop/question18.txt · Последние изменения: 2014/01/15 08:22 (внешнее изменение)