Объявление и определение функций
Функция — это именованная последовательность описаний и операторов, выполняющая какое-либо законченное действие. Функция в C++ объявляется, определяется, вызывается. К функции можно обращаться по имени, передавать ей значение и получить из нее результат..
Любая программа на C++ состоит из функций, одна из которых должна иметь имя main (с нее начинается выполнение программы). Функция начинает выполняться в момент вызова. Любая функция должна быть объявлена и определена. Следуя золотому правилу программирования объявление функции должно находиться в тексте раньше ее вызова для того, чтобы компилятор мог осуществить проверку правильности вызова.
Структура программы с использованием функций:
#include подключение библ. файлов Объявление глобальных переменных Объявление функции int main() { Объявление локальн. переменных … вызов функции … } определение функции | #include подключение библ. файлов Объявление глобальных переменных определение функции int main() { Объявление локальн. переменных … вызов функции … } |
Объявление функции (прототип, заголовок, сигнатура) задает ее имя, тип возвращаемого значения и список передаваемых параметров.
[ класс ] тип имя ([ список_паранетров ]);
Определение функциисодержит, кроме объявления, тело функции, представляющее собой последовательность операторов и описаний в фигурных скобках:
[ класс ] тип имя ([ список_паранетров ])
{ тело функции:
1) объявление локальных переменных
2) операторы
3) return [выражение]
}
Рассмотрим составные части определения.
- С помощью необязательного модификатора класс можно явно задать область видимости функции, используя ключевые слова extern и static:
• extern- глобальная видимость во всех модулях программы (по умолчанию);
• static — видимость только в пределах модуля, в котором определена функция.
- Тип возвращаемого функцией значения может быть любым, кроме массива и функции (но может быть указателем на массив или функцию). Если функция не должна возвращать значение, указывается тип void. По умолчанию(если тип опущен) предполагается, что возвращается тип int.
-Список параметров определяет величины, которые требуется передать в функцию при ее вызове. Элементы списка параметров разделяются запятыми. Для каждого параметра, передаваемого в функцию, указывается его тип и имя. Функция также может не иметь параметров. В этом случае объявление параметров в определении и прототипе может быть либо пустым, либо может состоять из одного ключевого слова void.
-returnслужит для выхода из функции и возврата значения в вызвавшую ее функцию.
Функция может содержать несколько операторов return (это определяется потребностями алгоритма и м.б. реализовано с помощью операторов условия). Если функция описана как void, выражение не указывается. Оператор return можно опускать для функции типа void, если возврат из нее происходит перед закрывающей фигурной скобкой. Выражение, указанное после return, неявно преобразуется к типу возвращаемого функцией значения и передается в точку вызова функции.
Для вызова функции необходимо указать ее имя, и в круглых скобках через запятую передать ей набор аргументов в соответствии с параметрами указанными в заголовке функции.
имя ( список аргументов);
Если тип возвращаемого функцией значения не void, она может входить в состав выражений или, в частном случае, располагаться в правой части оператора присваивания.
В определении, в объявлении и при вызове одной и той же функции типы и порядок следования параметров должны совпадать. На имена параметров и аргументов ограничений по соответствию не накладывается, поскольку функцию можно вызывать с различными аргументами, а в прототипах имена компилятором игнорируются (их можно опускать).
Пример №1
Написать программу для вычисления числа вычитаний
#include <iostream.h>
long fact(int ); // объявление функции
int main()
{int n, m,c;
cin >>n;
cin >>m;
cout <<”C=”<< fact(n)/(fact(m)*fact(n-m)); // вызов функции
return 0;
}
long fact(int a)// определение функции
{long p;
int i;
if(a==0|| a==1) return 1;
for(i=1;i<=n;i++)
p=p*i;
return p;
}
Пример №2
Написать программу для вычисления значения выражения:
#include <iostream.h>
#include <math.h>
float f(float , float ); // объявление функции
int main()
{float а, b, с, d;
cin >>a;
cin >>b;
cin >>c;
d=f(a,f(a,b))/f(b,c); // вызов функции
cout <<”d=”<< d;
return 0;
}
float f(float a, float b) // определение функции
{return sqrt(pow(a,3)+ pow(b,3));
}
Функцию можно определить как встроенную с помощью модификатора inline, который рекомендует компилятору вместо обращения к функции помещать ее код непосредственно в каждую точку вызова. Модификатор inline ставится перед типом функции. Он применяется для коротких функций, чтобы снизить накладные расходы на вызов (сохранение и восстановление регистров, передача управления). Директива inline носит рекомендательный характер и выполняется компилятором по мере возможности. Использование inline-функций может увеличить объем исполняемой программы. Определение функции должно предшествовать ее вызовам, иначе вместо inline-расширения компилятор сгенерирует обычный вызов.
Дата добавления: 2017-01-13; просмотров: 2960;