Передача функций в качестве параметров

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

 

cout << C << endl; // C –это функция из предыдущего параграфа

 

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

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

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

Рассмотрим пример:

 

Double add (double a, double b)

{

return a + b;

}

Double mul (double a, double b)

{

return a * b;

}

typedef double (*f_Ptr) (double, double);

Double oper (f_Ptr F, double a, double b)

{

Return F (a, b);

}

Int main ()

{

cout << oper (add, 20, 30) << endl; // 50

cout << oper (mul, 20, 30) << endl; // 600

Return 0;

}

 

В этом примере имеется некоторая универсальная функция oper, возвращающая значение вычисленной функции F для заданных значений aиb. Функция F, которую необходимо вычислить, передается в функцию oper через параметр этой функции. Ключевые элементы этого алгоритма выделены красным цветом. Для того, чтобы параметр F функции oper мог принимать в качестве аргумента другую функцию, с помощью инструкции typedef определяется тип данных указателя f_Ptr на функции, возвращающие значение типа double и имеющие два параметра типа double.

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

Несколько слов об инструкции typedef. С помощью этой инструкции можно определять новые типы данных и переопределять уже имеющиеся. Например: довольно утомительно в тексте программы многократно использовать название типа данных unsigned short. С помощью инструкции typedef можно упростить набор текста программы:

 

Typedef unsigned short UnS;

Теперь везде в тексте программы можно использовать вместо типа unsigned shortтипUnS.

Однако увлекаться такими “переименованиями” не следует. В основном инструкция typedefиспользуется при определении новых пользовательских типов данных.








Дата добавления: 2019-02-07; просмотров: 298;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.004 сек.