Class if_greater
{
public:
int operator ( ) (int a, int b) const {return a>b;}
};
Використання такого класу має специфічний синтаксис. Розглянемо приклад:
if_greater х;
cout <<х(1, 5) << endl; // Результат - 0
cout << if_greater( )(5, 1) << endl; // Результат – 1
Оскільки в класі if_greater визначена операція виклику функції з двома параметрами, вираз х(1, 5) є допустимим (те ж саме можна записати у вигляді x.operator () (1, 5) ). Як видно з прикладу, об'єкт функціонального класу використовується так, як якби він був функцією.
У другому операторові виведення вираз if_greater() використовується для виклику конструктору за умовчанням класу if_greater. Результатом виконання цього виразу є об'єкт класу if_greater. Далі, як і у попередньому випадку, для цього об'єкту викликається функція з двома аргументами, записаними в круглих дужках. Оператор () можна визначати тільки як метод класу. Можна визначити перевантажені оператори виклику функції з різною кількістю аргументів. Функціональні об'єкти широко застосовуються в стандартній бібліотеці C++.
5.7 Перевантаження оператору індексування
Оператор індексування [ ] зазвичай перевантажується, коли тип класу представляє безліч значень, для яких індексування має сенс. Оператор індексування повинен повертати посилання на елемент, що міститься в множині. Покажемо це на прикладі класу Vect, призначеного для зберігання масиву цілих чисел і безпечної роботи з ним:
#include <iostream>
using namespace std;
Дата добавления: 2014-12-26; просмотров: 1171;