Разработка приложений на C++
  • Введение
  • Особенности разработки программ на С++
    • Указатель на функцию
    • Преобразование типов
    • Наследование
    • Виртуальные функции
    • Перегрузка операций
    • Функциональные объекты
    • Шаблоны
    • Пространства имён
    • Обработка исключительных ситуаций
    • Немного о компиляции и сборке
    • Рекоммендации по написанию кода
    • Новые возможности стандарта С++11
    • Терминология
  • Понятие структур данных
    • Массивы
    • Динамические структуры
  • Метапрограммирование
    • Шаблоны функций
    • Шаблоны классов
    • Специализация шаблонов
      • Пример: вычисление факториала
      • Пример: числа Фиббоначчи
    • Конфигурации шаблонных классов
  • Стандартная библиотека С++
    • Обзор стандартной библиотеки С++
    • Структура стандартной библиотеки С++
      • Концепции
    • Ввод-вывод данных
    • Примитивы, определённые в библиотеке STL
    • Итераторы
    • Контейнеры
      • Inplus: Как это работает
    • Алгоритмы
      • inplus: Как это работает
    • Примеры использования стандартной библиотеки С++
    • Стандартная библиотека С++/Вопросы
    • Стандартная библиотека С++/Примеры лабораторных работ
  • Разработка и использование библиотек программирования
    • Создание библиотек программирования
    • Использование динамических библиотек
    • Вопросы
    • Примеры лабораторных работ
  • Ответы на вопросы
Powered by GitBook
On this page
  1. Особенности разработки программ на С++

Указатель на функцию

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

Объявление указателя на функцию идентично объявлению функции:

type func(params);
type (*pfunc)(params);

Пример:

void sort(double* v, size_t length); // объявление функции
void (*pfunc)(double*, size_t); // объявление указателя на функцию

Для использования указателей на функцию удобно объявлять тип указателя на функцию при помощи ключевого слова typedef:

typedef void (*pfunc_t)(double*, size_t);
pfunc_t pSort = sort;

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

​#include <stdio.h>

typedef void (*event_t)(void*, void*);

struct Button{
    size_t x, y, width, height;
    char text[255];
    event_t OnClick;
};

void ButtonPressed(void* /*sender*/, void* /*arg*/){
    puts("button pressed!");
}

int main(){
    Button btn = {5, 5, 75, 30, "Press Me!", ButtonPressed};
    btn.OnClick();
    return 0;
}
PreviousОсобенности разработки программ на С++NextПреобразование типов

Last updated 2 years ago