Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

05. Функции / Lesson05-presentation

.pdf
Скачиваний:
31
Добавлен:
18.03.2015
Размер:
155.4 Кб
Скачать

Урок 5: функции

Объявление, определение, сигнатура функции

Принципы проектирования функций

Ссылки

Передача параметров по ссылке

Значения параметров по умолчанию

Класс памяти static

Перегрузка функций и операций

Вызов функции и стек

Рекурсия

Переменные-функции

Массивы функций

Функции как параметры другой функции

Функции

Элементы функции

тип возвр.

список параметров

значения

заголовок int sum(int x, int y)

{

 

int

s;

 

тело

s =

x + y;

 

return

s;

 

}

 

 

int sum(int, int);

ОПРЕДЕЛЕНИЕ

ОБЪЯВЛЕНИЕ (ПРОТОТИП)

сигнатура

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

список формальных параметров

int sum(int x, int y)

 

{

ОПРЕДЕЛЕНИЕ

int s;

s = x + y;

 

return s;

 

}

 

int a = -3;

ВЫЗОВ

int z = sum(a, 2);

 

список фактических параметров

Правила создания функций

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

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

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

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

Вызов функции – это накладные расходы.

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

Ссылки

Ссылка

это производный тип данных

как и указатель, позволяет косвенно обращаться к другим переменным

ссылки более безопасны, чем указатели, но и менее функциональны

являются альтернативным именем для объекта

могут быть константными

Объявление переменной-ссылки:

int a;

int& r1 = a;

int& r2;

//

Ошибка компиляции! Ссылку нужно

 

//

проинициализировать при объявлении

Передача параметров по ссылке

Определение функции с параметром-ссылкой:

void square(int& a)

{

a *= a;

}

Вызов функции с параметром-ссылкой:

int x = 3; square(x);

cout << "x = " << x << endl; // 9

Передача параметров по ссылке

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

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

работа со ссылками более естественна, чем с указателями, которые нужно постоянно разыменовывать

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

Передача параметров по константной ссылке

void printDate(const Date* pDate)

{

cout << pDate->dd << '.'; cout << (int)pDate->mm << '.'; cout << pDate->yyyy;

}

void printDate(const Date& date)

{

cout << date.dd << '.'; cout << (int)date.mm << '.'; cout << date.yyyy;

}