Idea Transcript
КОНТРОЛЬНЫЙ
ЛИСТОК
СРОКОВ ВОЗВРАТА
МОСКОВСКИЙ
ГОСУДАРСТВЕННЫЙ АВТОМОБИЛЬНО-ДОРОЖНЫЙ
ИНСТИТУТ (ТЕНИЧЕСКИЙ УНИВЕРСИТЕТ)
КНИГА ДОЛЖНА БЫТЬ ВОЗВРАЩЕНА НЕ ПОЗЖЕ УКАЗАННОГО
ЗДЕСЬ СРОКА
Кафедра «АВТОМАТИЗИРОВАННЫЕ СИСТЕМЫ УПРАВЛЕНИЯ»
Колич. пред, выдач.
Заведующей кафедрой ,«у^ ^
с
г/
профессор
А.Б.
Николаев
2006 г.
А.Б. Самохвалов, Э.А. Чернов
Методические указания к лабораторным работам по дисциплине «Информационные технологии»
Часть 1
ФУНКЦИОНАЛЬНЫЕ
ОБЪЕКТЫ
*Уг,|.".1-..-.Г.1 ^ •
И АДАПТЕРЫ
;^
МОСКВА 2006
УДК 519.682(075.8)
ББК 681.3
Содержание 5
1. Функциональные объекты
4
Введение
2. Классы функциональных объектов стандартной биб-
Методические указания содержат краткое описание функциональных
объектов
и адаптеров стандартной
библиотеки
шаблонов языка
С++, типовые задания к лабораторным работам по данному разделу и примеры их выполнения. Предназначаются «Информатика
и
для студентов
и вычислительная
«Автоматизированные соответствует
направления
подготовки 654600
15
3. Адаптируемые функциональные объекты
13
лиотеки
4. Адаптеры функциональных
объектов
16 19
5. Адаптеры функций-членов Примеры заданий к лабораторным работам
23
25
Рекомендуемые источники
24
Список контрольных вопросов
техника» для специальности 220200
системы обработки информации и управления»
программе дисциплины
«Информационные
техноло-
гии».
© Московский автомобильно-дорожный институт (государственный технический университет) 2006
Задания, шаблонов -
связанные
с
вызывают
трудности
у
студентов
стандартной
библиотеки
объекты и их адаптеры, при
выполнении
технологии».
неред-
лабораторных
В то же время эта теинформационных
одним из лучших образцов практического вопло-
концепций обобщённого программирования. Настоящие
предоставляемых
практике
средствами
программирования
часто
обобщённого
встречаются
мето-
програм-
алгоритмы,
которых не зависит от типов данных, с которыми
вставка
связным списком, информационная
нового элемента,
такого
алгоритма
выпол-
элемента
обобщенным
представление выражения
объект
функции.
('ЧипсНоп оЬ]ес?') -
Функциональный
стратегии применения
быть обобщён путём помещения ный объект. Обобщённый дение екта.
путём
передачи
Типичная
алгоритм
объект
это обобщённое
предназначен
соответствующего
повсеместно
с помощью
для
алгоритма. Любой алгоритм может
части его поведения в
функциональ-
алгоритм «настраивается» на нужное
ему
ситуация,
реализуется
пове-
функционального
используемая
шаблона
функции, а
в
8Т1 -
объкогда
функциональ-
ный объект передаётся ей в качестве параметра. С точки зрения языковых
конструкций функциональный
объект
-
это сущность, которая
может быть применена с помощью обычного синтаксиса вызова функт.е.
с указанием имени
скобках. Для
и
перечислением
этого функциональные
объекты
аргументов
в круглых
реализуются как классы
с определённым оператором (операторной функцией) «скобки»:
являет-
составляющая ко-
работы с ним (проход по
исключение
называется
и т. д.).
методом
Реапро-
/* Модель обобщённого алгоритма: */ 1етр1а4е уо!с1 ЗотеА1доп1пт(11ег р1, Пег р2, Р Т) {
#тс1ис!е
из1пд пагпезрасе з{о!;
изтд патезрасе з(с1;
с!аз5 МуВ1пагу /* бинарная функция */
с!абз МуКпагуРгеа1 /* унарный предикат */
{
{
риЬНс:
риЬПс:
Ьоо!
Яоа1 орега{ог() (сопз* Яоа{ а, сопз! Иоа{ Ь) сспз! { геШгп (а + Ь) / с; }
МуипагуРгео!(1ги {) : т(1) {}
МуВ|'пагу(г!оа{ {) : с(т) {}
орега!ог() (1п4 е!ет) сопз{ { ге(игп !(е!ет % т); }
рпуа!е:
(1оа! с;
1п{
1п{ та!п()
т:
та1п()
та!п() у.ризг!_Ьаск(18); у.ризп_ЬасК(28); у.рибИ_Ьас1 может быть ше
в приведённом
элементов
меньше
5
высле-
Ьоо! 1зУаПс1(!п{ х) {ге*игп х == 0 || х == 4 ; }
дующим образом: ш! п = соипП
и
конструкторы «ипагу_педа*е»
использовать стандартные вспомога-
В данном
функтора
тельные функции «по11» и «по!2».
Уа11с1.
и
Пример: ется
предположим, имеется два
сравнить
их
поэлементно,
Для
примере
того,
чтобы
имеется
свободная
использовать её
в
(глобальная) функция
1з-
качестве адаптируемого
(унарного предиката) применяется функция «р*М
числовых диапазона; требу-
причём
результат
сравнения
равен
«{те» только в том случае, если оба числа равны 0. Решение:
5. Адаптеры функций-членов
1 та!п()
сопз{
{ з-З;
Данное
= {5, 8, 0};
сов
в
семейство адаптеров преобразует функции-члены
адаптируемые
функциональные
объекты.
Адаптер
клас-
функции-
члена
-20-
принимает указатель или ссылку на объект класса
вызова вующую
(если
они есть)
и вызывает
для
данного
и аргументы
объекта
-21-
аззег1(гез[0] == 20 && гез[1] == 12)-
соответст-
функцию-член.
Рассмотрим
в
«соп5т,_гпет_т'ип1_!>>,
качестве
примера
создающий
стантной функции-члена {етр1а!е
Алгоритм цию,
«{гап5[огт»,
как
известно,
выполняет
бинарную
используя в качестве аргументов вызова пару элементов
входных
диапазонов:
в нашем
случае
первый
держит элементы типа Орегайоп*, а второй -
с1азз сопз1_тет_т"ип1_! : риЫю Ыпагу„типст.юп
пляр адаптера
риЫю:
ся
{
подходящей
бинарной
функцией:
его
числа
оператор
(!п{). Экземявляет-
«скобки»
объект
класса «сопз1:_тет_{ип1_{» хранит
класса
«Т»
«скобки»
в
пере-
класса «Т», по-
получает
при
1П1 орега(ог() (сопз1: ОрегаИоп*, 1п4) сопз!. Стандартная членов
К {Т::*Р1г)(А) соне!;
видно, экземпляр
в конструкторе. Оператор
2 аргумента:
и аргумент, с которым должна
его адаптируемая функция. Реализация
«сопз!_тет_т"ип1_!»
функ-
из двух
входной диапазон со-
целые
сопз{_тет_й!п1_1 как раз и
инстанцировании получает сигнатуру
ехрНсИ соп51_тет_Тип1._1(Я (Т::*Рт)(А) сопз!) : Р!г(Рт) {} К орега!ог()(сопз! Т* р, А агд) сопз! { ге!ит ((р->*Р!г)(агд)); } рпуа1е:
(таблица
стантные
библиотека 2),
определяет
позволяющих
функции-члены
без
8
вызывать
аргумента
или
с
адаптеров константные одним
функцийи
некон-
аргументом, и
для каждой сигнатуры объект класса может передаваться через тель Как
менной «Р!г» указатель на константную функцию-член
на
указатель
лучаемый
вызвана
оператора
быть
«скобки»
собственно и осуществляет её вызов. Адаптером мер,
или ссылку. Для того, чтобы
ных
адаптеров,
«тет_7ип» должным версии
«тет_1гип_ге^»1 экземпляр
каждой
две
вспомогательные
возвращающие
адаптера
сигнатуры.
принимающих
указа-
не писать явно конструкторы указан-
ЗТ1 предоставляет
и
образом
для
адаптеров,
Первая
указатель
и
объект
функции -
инстанцированный
имеющие
функция
на
перегруженные
предназначена класса,
а
для
вторая
-
ссылку. можно
воспользоваться,
напри-
таким образом:
В
приведённом
выше
примере вместо создания локальной
пере-
менной «тт» следовало бы записать: {гапз1гогт(уОр.Ьед1п(), уОр.епс)(), о!а!а, ЬасК_1пзег{ег(ге8),
з!гис! Орега!юп { у1п:иа! т* Оо(1п!) сопз* = 0; };
тет_гип(&Орега1юп::Оо));
з!гис! Ми!2 : риЫю Орегайоп { У1г!иа1 т!
Таблица 2.
Оо(1п! х) сопз! { ге!игп х * 2; } };
Стандартные адаптеры Тип вызы-
Адаптер
|
функций-членов
функция для соз-
(ссылки/указателя) на
члена ! 1
т! та!п()
Вспомогательная
Вызывается для
ваемой
з!гис1 Р!из2 : риЫю Орегайоп
функции-
{ у1г!иа1 1п! Оо(1п! х) сопз! { ге!игп х + 2; } };
|
{
дания адаптера
объект класса
тет
ЯХ::т()
тип
тет
тип
тегп
Р1из2 р!з;
тет
Ми!2 ти!;
!
геС
!"ип1
геС
тет
указателя
!
тет
ссылки
!
!1т1
тип (ип
тет
указателя
!