Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву
Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Напередвизначені функціональні об’єктиСодержание книги
Поиск на нашем сайте Напередвизначені функціональні об’єкти розміщені в заголовочному файлі FUNCTIONAL і показані в таблиці 10.10. Там знаходяться об’єкти, які можуть працювати з більшістю операторів С++. В таблиці символом Т позначений довільний клас, користувача або одного з базових типів. Змінні x i y – об’єкти класу Т, що передаються в функцію у вигляді параметрів. Таблиця 10.9 Напередвизначені функціональні об’єкти
Як бачимо, наявні функціональні об’єкти для виконання арифметичних, логічних операцій та операцій порівняння. Розглянемо приклад, в якому використовується арифметичний функціональний об’єкт. Будемо працювати з класом airtime, що являє собою значення часу в хвилинах і годинах. В програмі 15.33 демонструється функціональний об’єкт plus<>(), за допомогою якого можна працювати зі значенням об’єктів airtime в контейнері. //використання алгоритму accumulate() і функціонального обєкту plus() #include<iostream> #include<numeric> #include<list> #include<conio> using namespace std; //////////// class airtime {private: int hours; int minutes; public: airtime():hours(0),minutes(0) { } airtime(int h,int m):hours(h),minutes(m) { } void display()const //вивід на екран {cout<<hours<<":"<<minutes;}
void get() //ввід даних користувачем { char dummy; cout<<"\nVvedit chas (format 12:59) "; cin>>hours>>dummy>>minutes; }
//перезавантажена операція airtime operator +(const airtime right) const {int temph=hours+right.hours; int tempm=minutes+right.minutes; if (tempm>=60) {temph++; tempm-=60;} return airtime(temph,tempm); }
//перезавантажений оператор == bool operator==(const airtime& at2) const {return(hours==at2.hours)&& (minutes==at2.minutes);} //перезавантажений оператор < bool operator<(const airtime& at2) const {return((hours<at2.hours)|| ((hours==at2.hours) && (minutes==at2.minutes))); }
//перезавантажений оператор!= bool operator!=(const airtime& at2) const {return!(*this==at2);}
//перезавантажений оператор > bool operator>(const airtime& at2) const {return!(*this<at2 && *this==at2);} }; /////////////////// int main() { char answer; airtime temp,sum; list<airtime> airlist; do { temp.get(); airlist.push_back(temp); cout<<"Continue (y/n)?"; cin>>answer; } while (answer!='n'); //підсумовувати всі елементи sum=accumulate(airlist.begin(),airlist.end(), airtime(0,0),plus<airtime>()); cout<<"\nSuma="; sum.display(); cout<<endl; getch(); return 0; }
Програма 15.33 Крім функціонального об’єкту, в цій програмі використовується алгоритм accumulate(). Існують дві версії цієї функції. Версія з трьома аргументами завжди підсумовує (за допомогою перезавантаженого +) значення з заданого діапазоеу. Якщо ж у алгоритму чотири аргументи, як і в нашому прикладі, то можна використовувати довільний алгоритм з приведено в таблиці 9.9. Чотири аргументи accumulate() – це ітератори першого і останнього елементу діапазону, ініціалізоване значення суми (звичайно 0), а також операція, яку слід застосовувати до елементів. В нашій програмі ми використовуємо додавання, хоча могли б використовувати також множення чи іншу операцію. Алгоритм accumulate() не тільки ясніший і зрозуміліший, аніж ітерація по контейнеру, але й більш ефективний. Функціональний об’єкт plus<>() потребує перезавантаження оператора +. Причому він повинен бути перезавантажений для класу airtime. Логічні функціональні об’єкти, такі як logical_and<>(), слід використовувати з об’єктами тих класів, де таке булеве перезавантаження має сенс. Наприклад, в якості об’єкту може виступати звичайна змінна логічного типу.
|
||||||||||||||||||||||||||||||||||
|
Последнее изменение этой страницы: 2021-12-15; просмотров: 107; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.217.21 (0.006 с.) |