Функции. Лекция 7

Содержание

Слайд 2

Вопрос 1

Объявление и определение функций

Вопрос 1 Объявление и определение функций

Слайд 3

Определение

Функция – это именованная последовательность описаний и операторов, выполняющая какое-либо законченное действие.

Определение Функция – это именованная последовательность описаний и операторов, выполняющая какое-либо законченное
Функция может принимать параметры и возвращать значение.

Слайд 4

Особенности

Любая программа на С++ состоит из функций, одна из которых должна иметь

Особенности Любая программа на С++ состоит из функций, одна из которых должна
имя main (с нее начинается выполнение программы). Функция начинает выполняться в момент вызова.
Любая функция должна быть объявлена и определена. Как и для других величин, объявлений может быть несколько, а определение только одно.
Объявление функции должно находиться в тексте раньше ее вызова для того, чтобы компилятор мог осуществить проверку правильности вызова.

Слайд 5

Структура функции

Объявление функции (прототип, заголовок, сигнатура) задает ее имя, тип возвращаемого значения

Структура функции Объявление функции (прототип, заголовок, сигнатура) задает ее имя, тип возвращаемого
и список передаваемых параметров.
Определение функции содержит, кроме объявления, тело функции, представляющее собой последовательность операторов и описаний в фигурных скобках:
[ класс ] тип имя ([ список параметров ])
{ тело функции }

Слайд 6

Класс функции

С помощью необязательного модификатора класс можно явно задать область видимости функции,

Класс функции С помощью необязательного модификатора класс можно явно задать область видимости
используя ключевые слова extern и static:
extern – глобальная видимость во всех модулях программы (по умолчанию);
static – видимость только в пределах модуля, в котором определена функция.

Слайд 7

Тип возвращаемого значения

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

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

Слайд 8

Параметры функции

Список параметров определяет величины, которые требуется передать в функцию при ее

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

Слайд 9

Параметры функции

В определении, в объявлении и при вызове одной и той же

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

Слайд 10

Вызов функции

Для вызова функции в простейшем случае нужно указать ее имя, за

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

Слайд 11

Пример 1

Функция, возвращающая сумму двух целых величин:
#include
int sum(int a, int b); //

Пример 1 Функция, возвращающая сумму двух целых величин: #include int sum(int a,
объявление функции
int main(){
int a = 2, b = 3, c, d;
с = sum(a, b); // вызов функции
cin >> d;
cout<< sum(c, d); // вызов функции
return 0;
}
int sum (int a, int b){ // определение функции
return (a + b);
}

Слайд 12

Пример 2

Функция, выводящая на экран поля переданной ей структуры:
#include
struct Worker{
char fio[30];
int

Пример 2 Функция, выводящая на экран поля переданной ей структуры: #include struct
code;
double zarpl;
};
void print_worker(Worker); //объявление функции
int main()
{
Worker mas[10];
... /* формирование массива mas */

Слайд 13

Пример 2 (продолжение)

for (int i = 0; i<10; i++)
print_worker(mas[i]); // вызов функции
return 0;
}
void

Пример 2 (продолжение) for (int i = 0; i print_worker(mas[i]); // вызов
print_worker(Worker w) // определение функции
{
cout<< w.fio << ' ' << w.date << ' ' << w.code
<< ' ' << w.zarpl << '\n';
}

Слайд 14

Локальные параметры

Все величины, описанные внутри функции, а также ее параметры, являются локальными.

Локальные параметры Все величины, описанные внутри функции, а также ее параметры, являются
Областью их действия является функция.
При выходе из функции значения локальных переменных между вызовами одной и той же функции не сохраняются.
Если этого требуется избежать, при объявлении локальных переменных используется модификатор static:
static int n = 0;

Слайд 15

Глобальные переменные

Глобальные переменные видны во всех функциях, где не описаны локальные переменные

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

Слайд 16

Вопрос 2

Возвращаемое значение и параметры функции

Вопрос 2 Возвращаемое значение и параметры функции

Слайд 17

Оператор return

Механизм возврата из функции в вызвавшую ее функцию реализуется оператором
return [

Оператор return Механизм возврата из функции в вызвавшую ее функцию реализуется оператором return [ выражение ];
выражение ];

Слайд 18

Особенности

Функция может содержать несколько операторов return (это определяется потребностями алгоритма).
Если функция

Особенности Функция может содержать несколько операторов return (это определяется потребностями алгоритма). Если
описана как void, выражение не указывается.
Оператор return можно опускать для функции типа void, если возврат из нее происходит перед закрывающей фигурной скобкой, и для функции main.
Выражение, указанное после return, неявно преобразуется к типу возвращаемого функцией значения и передается в точку вызова функции.

Слайд 19

Примеры:

 
int fl(){return 1;} // правильно
void f2(){return 1;} // неправильно, f2 не должна

Примеры: int fl(){return 1;} // правильно void f2(){return 1;} // неправильно, f2
возвращать значение
double f3(){return 1;}// правильно, 1 преобразуется к типу double

Слайд 20

Параметры функции

Параметры, перечисленные в заголовке описания функции, называются формальными параметрами, или просто

Параметры функции Параметры, перечисленные в заголовке описания функции, называются формальными параметрами, или
параметрами, а записанные в операторе вызова функции – фактическими параметрами, или аргументами.

Слайд 21

Способы передачи параметров

При передаче по значению в стек заносятся копии значений аргументов,

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

Слайд 22

Пример

#include
void f (int i, int* j, int& k);
int main(){
int i =

Пример #include void f (int i, int* j, int& k); int main(){
1, j = 2, k = 3;
cout << "i j k\n";
cout << i << ' ' << j << ' ' << k << '\n';
f(i, &j, k);
cout << i << ' ' << j << ' ' << k;
return 0:
}

Слайд 23

Пример (продолжение)

void f(int i, int* j, int& k){
i++; (*j)++; k++;
}
Результат работы программы:
i

Пример (продолжение) void f(int i, int* j, int& k){ i++; (*j)++; k++;
j k
1 2 3
1 3 4

Слайд 24

Пример (продолжение)

Первый параметр (i) передается по значению. Его изменение в функции не

Пример (продолжение) Первый параметр (i) передается по значению. Его изменение в функции
влияет на исходное значение.
Второй параметр (j) передается по адресу с помощью указателя, при этом для передачи в функцию адреса фактического параметра используется операция взятия адреса, а для получения его значения в функции требуется операция разыменования.
Третий параметр (k) передается по адресу с помощью ссылки.
Имя файла: Функции.-Лекция-7.pptx
Количество просмотров: 45
Количество скачиваний: 0