Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Предопределенные объекты-функции
Предопределенные объекты-функции подразделяются на арифметические, логические и сравнительные. Каждый объект – это шаблон класса, параметризованный типами операндов. Для использования любого из них необходимо включить заголовочный файл: #include < functional> Например, объект-функция, поддерживающий сложение, – это шаблон класса с именем plus. Для определения экземпляра, способного складывать два целых числа, нужно написать:
plus< int > intAdd; Для выполнения операции сложения мы применяем перегруженный оператор вызова к intAdd точно так же, как и к классу AddImage в предыдущем разделе:
int sum = intAdd( ival1, ival2 ); Реализация шаблона класса plus вызывает оператор сложения, ассоциированный с типом своего параметра – int. Этот и другие предопределенные объекты-функции применяются прежде всего в качестве аргументов обобщенных алгоритмов и обычно замещают подразумеваемую по умолчанию операцию. Например, по умолчанию алгоритм sort() располагает элементы контейнера в порядке возрастания с помощью оператора “меньше” базового типа. Для сортировки по убыванию мы передаем предопределенный шаблон класса greater, который вызывает оператор “больше”:
sort( svec.begin(), svec.end(), greater< string> () ); Предопределенные объекты-функции перечислены в следующих разделах и разбиты на категории: арифметические, логические и сравнительные. Применение каждого из них иллюстрируется как в качестве именованного, так и в качестве безымянного объекта, передаваемого функции. Мы пользуемся следующими определениями объектов, включая и определение простого класса (перегрузка операторов подробно рассматривается в главе 15):
double dval1, dval2, dres; Кроме того, мы определяем два шаблона функций, которым передаем различные безымянные объекты-функции:
{ return fob( val1, val2 ); } Арифметические объекты-функции Предопределенные арифметические объекты-функции поддерживают операции сложения, вычитания, умножения, деления, взятия остатка и вычисления противоположного по знаку значения. Вызываемый оператор – это экземпляр, ассоциированный с типом Type. Если тип является классом, предоставляющим перегруженную реализацию оператора, то именно эта реализация и вызывается. · Сложение: plus< Type>
dres = BinaryFunc( plus< double> (), dval1, dval2 ); · Вычитание: minus< Type>
dres = BinaryFunc( minus< double> (), dval1, dval2 ); · Умножение: multiplies< Type>
dres = BinaryFunc( multiplies< double> (), dval1, dval2 ); · Деление: divides< Type>
dres = BinaryFunc( divides< double> (), dval1, dval2 ); · Взятие остатка: modulus< Type>
ires = BinaryFunc( modulus< int> (), ival1, ival2 ); · Вычисление противоположного значения: negate< Type>
Ires = UnaryFunc( negate< Int> (), Ival1 ); |
Последнее изменение этой страницы: 2019-04-09; Просмотров: 289; Нарушение авторского права страницы