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




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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Про Olej

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

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

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

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

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

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

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