Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Алгоритмизация.docx
Скачиваний:
11
Добавлен:
21.11.2019
Размер:
59 Кб
Скачать
☆

67. Параметры функции, заданные по умолчанию

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

значение по умолчанию можно задать в заголовке функции, например: int myFunc(int a = 5; int b = 10;){}

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

int f(double a, double b = 0, double c = 1)

{

//...

}

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

double x = 0.1;

double y = 0.2;

double z = 0.3;

cout << f(x) << f(x, y) << f(x, y, z);

68. Функции подстановки

Функции-подстановки, или встроенные, объявлены с модификатором inline:

inline int min(int a, int b)

{

return a < b ? a : b;

}

Если функция объявлена встроенной, то компилятор подставляет в точку вызова ее тело. Спецификация inline служит подсказкой транслятору. Из-за наличия взаиморекурсивных вызовов функций-подстановок, а также функций-подстановок, рекурсивность которых зависит от входных данных, нельзя утверждать, что каждый вызов функции-подстановки действительно реализуется подстановкой ее тела.

Целесообразно с модификатором inline описывать самые простые функции, многократная подстановка которых не существенно повлияет на размеры программы.

69. Перегруженные функции

Перегрузка функций — возможность создавать несколько функций с одинаковыми именами но с различным набором параметров.

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

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

int max(int, int); // Выбор максимального из двух целых чисел

int max(const int *, int); // Выбор максимального элемента массива

int max(const List&); // Выбор максимального элемента списка

70. Указатель на функцию

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

Указатель на функцию должен тоже описываться с тем же списком параметров и типом возвращаемого значения, что и сама функция. → int (*pf)(int);

Скобки вокруг *pf обязательны. Имя функции без следующих за ним скобок интерпретируется как указатель на функцию. Указатель на функцию применяется для вызова функции, которую он адресует.

Часто для удобства определяют синоним типа указателя на функцию через typedef:

typedef int (*FuncType)(int);

FuncType pf;

Указатели на функцию чаще всего используются в качестве формальных параметров других функций.

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