Skip to content

Latest commit

 

History

History

lesson-21-function-pointers

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 

README.md

Урок 21. Указатели на функции и лямбды

Цель

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

Что такое указатель на функцию?

Указатель на функцию — это переменная, которая хранит адрес функции. Через неё можно вызывать функцию так же, как через её имя.

1. Создание указателя на функцию

int add(int a, int b) { return a + b; }
int subtract(int a, int b) { return a - b; }

// Указатель на функцию: (тип_возврата)(*имя)(параметры)
int (*funcPtr)(int, int);

funcPtr = add;
cout << funcPtr(5, 3); // 8

funcPtr = subtract;
cout << funcPtr(5, 3); // 2

2. Передача функции как аргумента (callback)

Позволяет сделать функцию гибкой: поведение задаётся снаружи.

int calculate(int a, int b, int (*operation)(int, int)) {
    return operation(a, b);
}

cout << calculate(10, 5, add);      // 15
cout << calculate(10, 5, subtract); // 5

3. std::function (современный способ)

Более удобная обёртка для функций (и лямбд). Требует #include <functional>.

#include <functional>

function<int(int, int)> op;
op = add;
cout << op(10, 5); // 15

4. Лямбда-функции

Лямбда — это анонимная функция (без имени). Синтаксис: [](параметры) { тело }.

auto square = [](int x) {
    return x * x;
};
cout << square(5); // 25

Лямбды можно передавать как callback:

calculateFunc(10, 5, [](int a, int b) { return a + b; });

5. Лямбды в алгоритмах STL

#include <algorithm>

// Сортировка по убыванию
sort(nums.begin(), nums.end(), [](int a, int b) {
    return a > b;
});

6. Когда использовать?

  • Передача функции как аргумента (callbacks).
  • Выбор функции во время выполнения.
  • Сортировка с пользовательским сравнением.
  • Обработка событий (кнопки, меню).

Примеры

Что дальше

Урок 22 (бонусный) — многопоточность.