Основи програмування на С ++ для початківців

Функціональні об'єкти. STL (частина 11)

У попередніх обговореннях вже неодноразово з'являвся такий термін як функтор, але особливої ​​актуальності він набуває стосовно алгоритмам. Тепер настав час розібратися з цим поняттям. Функтор - це скорочення від еункціональний об'єкт, представляє собою конструкцію, що дозволяє використовувати об'єкт класу як функцію. У C ++ для визначення функтора досить описати клас, в якому перевизначена операція ().

те, як з об'єкта утворюється функція, легко показати на такому простому прикладі:

Уже з такого простого прикладу видно наступне: операция () в класі може бути перевизначена (точніше визначена, оскільки вона не має реалізації за замовчуванням) з довільним числом, типом параметрів і типом значення, що повертається (або навіть зовсім без значення, що повертається). В підсумку:

функтор, з ++ для початківців, функціональний об'єкт, бібліотека стл, СТЛ

Вигода функтора полягає в тому, що а). його можна параметризрвані при створенні об'єкта (перед викликом) використовуючи конструктор об'єкта з параметрами і б). може створюватися тимчасовий об'єкт виключно на час виконання функціонального виклику. Це ілюструється прикладом такого спрощеного целочисленного калькулятора:

Тут в рядку cout << обчислювати( опер )( op1, op2 ) дії виконуються послідовно:

    • створюється тимчасовий об'єкт класса  обчислювати конструктором з параметром опер;

    • для цього об'єкта виконується метод () (функціональний виклик) з двома параметрами;

    • операция, яка буде виконана в цьому функціональному виклику, залежить від того параметра опер, з яким був сконструйований об'єкт;

  • функціональний виклик повертає значення результату операції;

  • створений тимчасовий об'єкт, відразу ж після цього руйнується (якби у нього був описаний деструктор, то він би викликався в цій точці);

І в результаті ми отримуємо:

функтор, з ++ для початківців, функціональний об'єкт, бібліотека стл, СТЛ

Але особливо широке застосування функтори придбали в алгоритмах STL, розглянутих раніше, коли вони передаються в виклик в якості параметра, замість функції, визначальною дію або предикат алгоритму.

3 думки про "Функціональні об'єкти. STL (частина 11)

  1. А чому в першому прикладі символ : стоїть перед словом public? Поясніть, будь ласка)

    1. Це вже з іншого розділу C ++: классы, області видимості.
      У прикладі private відноситься до видимості базового класу: доступ до базового класу існує тільки зсередини класу summator.
      Кваліфікатор public далі вже визначений всередині класса, і відноситься до функцій членам, оголошеним після нього: конструктору і оператору (). Він показує що ці функції члени видимі і можуть бути використані в будь-якому місці програми.

      В даному прикладі все це не так важливо, але це окрема і важлива частина мови C ++.

Залишити коментар до Наталка Скасувати відповідь

Ваша електронна адреса не буде опублікований. Обов'язкові поля позначені * *