Этот сайт использует cookies. Продолжение работы с сайтом означает, что Вы согласны!
Указатели на функции и класс function
Функции также как и переменные имеют адрес, который можно сохранить в указателе. В дальнейшем через указатель можно вызвать эту функцию. Кроме того, допускается передавать указатель на функцию в качестве параметра другой функции.
Указатели на функции
Объявление указателя на функцию выглядит так:
<Тип> (*<Название указателя>)([<Тип 1>[, ..., <Тип N>]]);
Чтобы присвоить указателю адрес функции, необходимо указать название функции без параметров и круглых скобок справа от оператора =
. Типы параметров указателя и функции должен совпадать. Пример объявления указателя и присваивания адреса функции:
int (*pfunc)(int, int) = nullptr;
pfunc = sum;
Вызвать функцию через указатель можно так:
int x = pfunc(30, 10); // Аналогично x = sum(10, 20);
Или так:
int y = (*pfunc)(30, 10);
Пример объявления указателя, вызова функции через указатель и передачи указателя в качестве параметра функции приведен в листинге 12.24.
Листинг 12.24. Указатели на функции
#include <iostream>
void print_ok();
int add(int x, int y);
int sub(int x, int y);
int func(int x, int y, int (*pfunc)(int, int));
int main() {
// Объявление указателей на функции
void (*pf1)() = nullptr;
int (*pf2)(int, int) = nullptr;
// Присваивание адреса функции
pf1 = print_ok;
pf2 = add;
// Вызов функций через указатели
pf1(); // OK
std::cout << pf2(30, 10) << std::endl; // 40
// Передача указателя на функцию
// в качестве параметра
std::cout << func(10, 5, pf2) << std::endl; // 15
std::cout << func(10, 5, add) << std::endl; // 15
std::cout << func(10, 5, sub) << std::endl; // 5
return 0;
}
void print_ok() {
std::cout << "OK" << std::endl;
}
int add(int x, int y) {
return x + y;
}
int sub(int x, int y) {
return x - y;
}
int func(int x, int y, int (*pfunc)(int, int)) {
return pfunc(x, y);
}
Помощь сайту
ЮMoney (Yandex-деньги): 410011140483022
ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов