Объектно-ориентированное программирование на C++. Андрианова А.А - 28 стр.

UptoLike

Андрианова А.А., Исмагилов Л.Н., Мухтарова Т.М.
double sin(double); // y = sin(x)
double ln(double); // y = ln(x)
double exp(double); // y = exp(x)
// и т.д.
Опишем переменную-указатель с именем f, которой можно
присвоить адреса каждой из выше приведенных функций:
double (*f)(double);
Здесь определяется переменная f как указатель на функцию, которая
возвращает значение типа double и имеет один аргумент типа double.
Следует обратить внимание на наличие скобок в описании
переменной. Отсутствие этих скобок трактует данную запись как
прототип функции с именем f и параметром типа double,
возвращающую значение указателя на тип double.
Присвоим переменной f адрес функции вычисления синуса:
f = sin; // sin – адрес начала машинного кода функции
// double sin(double)
Таким же образом можно было присвоить переменной f адрес любой
из вышеперечисленных функций.
Далее вызывать функцию вычисления синуса можно через
переменную-указатель:
double y = f(3.1415926); // вызов функции sin(3.1415926)
или через операцию разадресации переменной-указателя:
double y = (*f)(3.1415926);
Указатели на функции часто используются в качестве параметров
других функций. Проиллюстрируем это при решении следующей задачи:
найти корень уравнения
0)(
=
xF
методом деления отрезка пополам.
Предусмотреть возможность использования в качестве
)(xF
различных
функций. Это обеспечивается посредством введения четвертого
параметра, который является указателем на функцию вычисления
)(xF
.
// функция решения уравнения F(x) = 0 на отрезке [a; b]
// с точностью eps>0 методом деления отрезка пополам
double Root(double a, double b, double eps,
double (*f)(double))
28
                               Андрианова А.А., Исмагилов Л.Н., Мухтарова Т.М.
     double sin(double);      // y = sin(x)
     double ln(double);       // y = ln(x)
     double exp(double);      // y = exp(x)
     // и т.д.

    Опишем переменную-указатель с именем f, которой можно
присвоить адреса каждой из выше приведенных функций:

     double (*f)(double);

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

     f = sin;   // sin – адрес начала машинного кода функции
                // double sin(double)

     Таким же образом можно было присвоить переменной f адрес любой
из вышеперечисленных функций.
     Далее вызывать функцию вычисления синуса можно через
переменную-указатель:

     double y = f(3.1415926); // вызов функции sin(3.1415926)

или через операцию разадресации переменной-указателя:
     double y = (*f)(3.1415926);

    Указатели на функции часто используются в качестве параметров
других функций. Проиллюстрируем это при решении следующей задачи:
найти корень уравнения F ( x) = 0 методом деления отрезка пополам.
Предусмотреть возможность использования в качестве F (x) различных
функций. Это обеспечивается посредством введения четвертого
параметра, который является указателем на функцию вычисления F (x) .

     // функция решения уравнения F(x) = 0 на отрезке [a; b]
     // с точностью eps>0 методом деления отрезка пополам
     double Root(double a, double b, double eps,
                                       double (*f)(double))


28