- •ФУНКЦИИ ИСПОЛЬЗУЮТСЯ ДЛЯ НАВЕДЕНИЯ ПОРЯДКА В ХАОСЕ АЛГОРИТМОВ.
- •ФУНКЦИИ
- •Функция — это именованная
- •Объявление и определение функций.
- •ОБЪЯВЛЕНИЕ И ОПРЕДЕЛЕНИЕ ФУНКЦИЙ.
- •Объявление функции
- •[класс] тип имя ([список_параметров]) [throw(исключения)] {тело функции}
- •[класс] тип имя ([список_параметров]) [throw(исключения)] {тело функции}
- •[класс] тип имя ([список_параметров]) [throw(исключения)] {тело функции}
- •[класс] тип имя ([список_параметров]) [throw(исключения)] {тело функции}
- •Функцию можно определить как встроенную с помощью модификатора inline.
- •ОБЪЯВЛЕНИЕ И ОПРЕДЕЛЕНИЕ ФУНКЦИЙ.
- •Значения локальных переменных между вызовами одной и той же функции не сохраняются.
- •Механизм возврата из функции в вызвавшую ее функцию реализуется оператором
- •ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ.
- •Примеры:
- •Параметры
- •При вызове функции:
- •Существует два способа передачи параметров в функцию:
- •ПАРАМЕТРЫ ФУНКЦИИ.
- •Пример:
- •По умолчанию параметры любого типа,
- •ПЕРЕДАЧА МАССИВОВ В КАЧЕСТВЕ ПАРАМЕТРОВ.
- •ПЕРЕДАЧА МНОГОМЕРНЫХ МАССИВОВ В КАЧЕСТВЕ ПАРАМЕТРОВ.
- •Функцию можно вызвать через указатель на нее.
- •void f(int a ){/*...*/ } // определение функции
- •ПЕРЕДАЧА ИМЕН ФУНКЦИЙ В КАЧЕСТВЕ ПАРАМЕТРОВ.
- •Чтобы упростить вызов функции, в ее заголовке можно указать значения параметров по умолчанию
- •Пример:
- •Функции с переменным числом параметров
- •ФУНКЦИИ С ПЕРЕМЕННЫМ ЧИСЛОМ ПАРАМЕТРОВ.
- •В качестве примера можно привести
- •ФУНКЦИИ С ПЕРЕМЕННЫМ ЧИСЛОМ ПАРАМЕТРОВ.
- •За правильность выбора дополнительных аргументов из
- •ФУНКЦИИ С ПЕРЕМЕННЫМ ЧИСЛОМ ПАРАМЕТРОВ.
- •Функции с переменным числом параметров 41
- •МАКРОКОМАНДА VA_START.
- •Функции с переменным числом параметров 43
- •МАКРОКОМАНДА VA_ARG.
- •Функции с переменным числом параметров 45
- •ПРИМЕР ФУНКЦИИ С ПЕРЕМЕННЫМ ЧИСЛОМ ПАРАМЕТРОВ.
- •ЗАМЕЧАНИЯ К ПРИМЕРУ.
- •Поскольку компилятор не имеет информации для контроля типов, вместо функций с переменным
- •Рекурсивные
- •РЕКУРСИВНЫЕ ФУНКЦИИ.
- •Пример:
- •РЕКУРСИВНЫЕ ФУНКЦИИ.
ПЕРЕДАЧА ИМЕН ФУНКЦИЙ В КАЧЕСТВЕ ПАРАМЕТРОВ.
Указатели на функции передаются в подпрограмму таким же образом, как и параметры других типов.
Тип указателя и тип функции, которая вызывается посредством этого указателя, должны совпадать в точности.
31
#include <iostream.h> typedef void (*PF)(int); void f1(PF pf){
// функция f1 получает в качестве параметра указатель типа PF pf(5); // вызов функции, переданной через указатель
}
void f(int i){cout << i;} int main(){
f1(f); return 0;
}
Передача имен функций в качестве параметров |
32 |
Чтобы упростить вызов функции, в ее заголовке можно указать значения параметров по умолчанию
Параметры со значениями по умолчанию |
33 |
Пример:
int f(int a, int b = 0);
void f1(int, int = 100, char* = 0);
//обратите внимание на пробел между * и =
//без него получилась бы операция сложного присваивания *=
void err(int errValue = errno); // errno - глобальная переменная
. . . . . . . |
|
f(100); f(a, 1); |
// варианты вызова функции f |
f1(a); f1(a, 10); f1(a, 10, "Vasia"); // варианты вызова функции f1
f1(a,,"Vasia") // неверно!
Параметры со значениями по умолчанию |
34 |
Функции с переменным числом параметров
•Если список формальных параметров функции заканчивается многоточием, это означает, что при ее вызове на этом месте можно указать еще несколько параметров.
ФУНКЦИИ С ПЕРЕМЕННЫМ ЧИСЛОМ ПАРАМЕТРОВ.
Проверка соответствия типов для параметров обозначенных многоточием не выполняется!
char и short передаются как int
float — как double
36
В качестве примера можно привести |
функцию printf, прототип которой |
имеет вид: int printf(const char*, ...); |
Это означает, что вызов функции должен содержать по крайней мере один параметр типа char* и может либо содержать, либо
не содержать другие параметры
printf("Введите исходные данные");
printf("Сумма: %5.2f рублей", sum);
//один параметр
//два параметра
printf ("%d %d %d %d", а, Ь, с, d); // пять параметров
Функции с переменным числом параметров 37
ФУНКЦИИ С ПЕРЕМЕННЫМ ЧИСЛОМ ПАРАМЕТРОВ.
Все аргументы, заданные в вызове функции с переменным числом параметров, размещаются в стеке.
Количество формальных параметров, объявленных для функции, определяется числом аргументов, которые берутся из стека и присваиваются формальным параметрам.
38
За правильность выбора дополнительных аргументов из
стека и определение числа аргументов, находящихся в стеке
отвечает программист!
39
ФУНКЦИИ С ПЕРЕМЕННЫМ ЧИСЛОМ ПАРАМЕТРОВ.
Для обеспечения удобного способа доступа к аргументам функции с переменным числом параметров имеются три макроопределения
(макросы) va_start, va_arg, va_end,
находящиеся в заголовочном файле stdarg.h.
Эти макросы указывают на то, что функция, разработанная пользователем, имеет некоторое число обязательных аргументов, за которыми следует переменное число необязательных аргументов.
Обязательные аргументы доступны через свои имена как при вызове обычной функции.
40