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

Double mul (double a, double b)

Double add (double a, double b)

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

Else

return C(n, m - 1) * (n - m + 1) / m;

}

Этот вариант функции позволяет точно вычислять значения биномиальных коэффициентов при n < 31. Диапазон решения расширен почти в два раза.

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

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

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

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

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

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

{

return a + b;

}

{

return a * b;

}

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

{

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 используется при определении новых пользовательских типов данных.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: