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




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

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

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

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

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

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

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

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

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

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

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

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

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

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

Нові уроки з програмування:

дата
сторінка
Функціональні об'єкти (функтори) C . СТЛ Частина 11
рейтинг
5
Olej

Про Olej

Стаж практичних програмних розробок близько 40 лет. Викладач міжнародної софтверної компанії Global Logic. Постійний автор публікацій IBM Developer Works. Науковий редактор книжкового видавництва комп'ютерної літератури "Символ-Плюс", Санкт-Петербург.

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

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

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

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

залишити коментар

Код розміщуйте в тегах: <pre class="lang:C ++ декодуванням:true ">ВАШ КОД</заздалегідь>