Вызов функции, то есть запись выражение (список_выражений), можно проинтерпретировать как бинарную операцию, и операцию вызова можно перегружать так же, как и другие операции. Список параметров функции operator() вычисляется и проверяется в соответствие с обычными правилами передачи параметров. Перегружающая функция может оказаться полезной главным образом для определения типов с единственной операцией и для типов, у которых одна операция настолько преобладает, что другие в большинстве ситуаций можно не принимать во внимание.
Для типа ассоциативного массива assoc мы не определили итератор. Это можно сделать, определив класс assoc_iterator, работа которого состоит в том, чтобы в определенном порядке поставлять элементы из assoc. Итератору нужен доступ к данным, которые хранятся в assoc, поэтому он сделан другом:
class assoc {
friend class assoc_iterator;
pair* vec;
int max;
int free;
public:
assoc(int);
int& operator[](char*);
};
Итератор определяется как
class assoc_iterator{
assoc* cs; // текущий массив assoc
int i; // текущий индекс
public:
assoc_iterator(assoc& s) { cs = &s; i = 0; }
pair* operator()()
{ return (ifree)? &cs->vec[i++] : 0; }
};
Надо инициализировать assoc_iterator для массива assoc, после чего он будет возвращать указатель на новую pair из этого массива всякий раз, когда его будут активизировать операцией (). По достижении конца массива он возвращает 0:
main() // считает вхождения каждого слова во вводе
{
const MAX = 256; // больше самого большого слова
char buf[MAX];
assoc vec(512);
while (cin>>buf) vec[buf]++;
assoc_iterator next(vec);
pair* p;
while ( p = next() )
cout << p->name << ": " << p->val << "n";
}
Итераторный тип вроде этого имеет преимущество перед набором функций, которые выполняют ту же работу: у него есть собственные закрытые данные для хранения хода итерации. К тому же обычно существенно, чтобы одновременно могли работать много итераторов этого типа.
Конечно, такое применение объектов для представления итераторов никак особенно с перегрузкой операций не связано. Многие любят использовать итераторы с такими операциями, как first(), next() и last() (первый, следующий и последний).
Другие работы по теме:
Философия истории Арнольда Дж.Тойнби
Именно как автор "A Study of History", фундаментального двенадцатитомного труда, посвященного генезису, росту и распаду культур и цивилизаций, Тойнби и останется в истории гуманитарного знания.
Реклама товара
Открытый публичный конкурс. Реклама и договорные понятия.
Теория вероятности и математическая статистика
Классическое определение вероятности события. Способы вычисления наступления предполагаемого события. Построение многоугольника распределения. Поиск случайных величин с заданной плотностью распределения. Решение задач, связанных с темой вероятности.
Что такое свобода
Сочинение-рассуждение с элементами цитирования Человек всегда во все времена стремилась к свободе. Только понимание свободы у всех разное. Я думаю, что свобода - это, в первую очередь, свобода от предрассудков. Предрассудки ограничивают способности человека, поскольку в большинстве случаев основаны на ошибочных знаниях и выводах.
Герой и толпа в лирике Маяковского
Лирика Маяковского близка традициям романтической поэзии: в ней воплощается конфликт исключительного человека и толпы. За внешней грубостью лирического героя скрывается ранимое и нежное сердце. Его вызов – от боязни непонимания и одиночества. Герой раннего Маяковского романтичен по своему мироощущению.
Тема любви в поэме Маяковского Облако в штанах
Автор: Маяковский В.В. Любовь Маяковского – это жизнь, это интересный мир человеческой души, это целая гамма чувств и переживаний. Поэт – молодой человек, в душе которого «ни одного седого волоса», то есть ему дано любить, он способен искренне переживать. Еще во вступлении поэмы «Облако в штанах» он бросает вызов людям: у него молодость и любовь идут руки об руку!
Микроконтроллер системы управления (автосигнализация)
Проектирование специализированных радиоэлектронных устройств с применением микропроцессорных комплектов и цифровых микросхем среднего и малого уровней интеграции. Архитектура микроконтроллеров семейства INTEL8051. Программа устройства на Ассемблере.
Микроконтроллер системы управления
Проектирование микроконтроллера системы управления холодильника, разработка принципиальной электрической и общей функциональной схемы устройства. Описание работы специальной прикладной программы. Программа устройства на Ассемблере. Блок-схема программы.
Война за флагшток
, англ. Flagstaff War, также известна как восстание Хоне Хеке , произошла в период с 11 марта 1845 по 11 января 1846 в Заливе Островов, Новая Зеландия между британскими поселенцами в Новой Зеландии и коренными жителями маори. Наиболее яркими событиями войны были действия вождя Хоне Хеке, бросившего вызов британской короне, срубив флагшток на Флаговом Холме в Корорарека, ныне Рассел.
Иракская колода
(другие названия: Most Wanted Колода смерти ) — известная комбинация игральных карт, выполненная в виде портретов самых разыскиваемых оккупационной администрацией США иракцев. Использовалась в течение Иракской войны для поиска свергнутых иракских лидеров.
Лесли, Фрэнк
Введение 1 Биография 2 Интересные факты 3 В литературе Список литературы Введение Фрэнк Лесли (наст. имя Генри КартерОшибка цитированияНеправильный вызов: неверные ключи, например было указано слишком много ключей или ключ был неправильным) (англ. Frank Leslie, 29 марта 1821 — 10 января 1880) — известный английский и американский художник-гравёр, издатель, активный иллюстратор гражданской войны в США 1861—1865 годов.
Премьер-министр Ирака
Введение 1 Список премьер-министров Ирака 1.1 Королевство Ирак 1.2 Иракская республика Список литературы Введение Премьер-министр Ирака - глава иракского правительства. Согласно конституции 2005 года Ирак является независимым, суверенным, демократическим и федеративным государством с парламентской республиканской формой правления.
Афанасьев, Валерий Алексеевич
План Введение 1 Краткая биография 2 Избранная фильмография 2.1 Роли в кино 2.2 Роли в сериалах Введение Валерий Алексеевич Афанасьев (20 августа 1949 — российский актёр театра и кино, Народный артист России (2005).
Массовое убийство в Налибоках
Массовое убийство в Налибоках (белор. Трагедыя ў Налібоках) — расправа, учиненная советскими партизанами над гражданским населением польской деревни Налибоки (в Налибокской пуще, ныне территория Белоруссии) 8 мая 1943 года. В результате расправы погибло 128 человек, включая трех женщин, несколько подростков и 10-летний мальчик.
Основные операторы языка Turbo-Paskal. Процедуры и функции
Принцип работы основных операторов языка программирования Turbo-Paskal: оператор присваивания, выбора Case, безусловного перехода, цикла, уловный, составной. Формальное описание и вызов функции и процедуры. Требования к списку фактических параметров.
Форматированный ввод
Лисповская функция чтения READ. Интерпретатор. Вызов READ. Построенные структуры. Внешние устройства и доступ к ним. Типы потоков и операции используемые для ввода и вывода. Действие макроса. Запись символов и макроинтерпретаций. Системная переменная.
Микроконтроллеры семейства MCS51 Intel
Инструкции MCS51 Intel Инструкции, модифицирующие флаги (1) Инструкция C OV AC Инструкция C OV AC CLR C ADDC CPL C SUBB ANL C,bit ANL C,/bit ORL C,bit ORL C, bit
Использование Prolog совместно с другими ЯП
Понятие Dll. Вспомним процесс программирования в DOS. Преобразование исходного текста в машинный код включал в себя 2 процесса: компиляцию и линковку. Во время линковки в код программы помещались не только объявления функций и процедур, но и их полный код.
Считаем время выполнения скрипта
Вы наверняка замечали на некоторых сайтах внизу страницы надпись, что мол скрипт выполнен или страница создана за столько-то секунд. И сейчас мы сделаем это средствами PHP.
Новые операторы языка манипулирования данными (DML)
CTE - выражения для упрощения читаемости запросов. Однократный вызов CTE и использование CTE для рекурсивного прохода по дереву. Операторы Pivot, Unpivot, Apply. Функции ранжирования. Создание хранимой процедуры с использованием нового обработчика ошибок.
Создание простейшего сервера в ОС QNX
Функции для работы с протоколом TCP/IP, Socket, Bind, listen и accept. Файловый дескриптор. Коммуникационные процессы. Прием данных. Чтение из сокета. Запись в сокет. Закрытие сокета. Текст программы, создающей Web-сервер в операционной системе QNX.
ЛИСП-реализация основных способов вычисления гамма-функции
Изучение представления, основных способов расчета для целых положительных, простых чисел и ряда точек, и вычисления путем аппроксимации логарифма гамма-функции. Предоставление функциональных моделей, блок-схем и программной реализации решения задачи.
Подпрограммы (процедуры и функции)
Алгоритм, ранее разработанный и целиком используемый в составе других алгоритмов, называется вспомогательным. Применение вспомогательных алгоритмов позволяет разбить задачу на части, структурировать ее.
Программирование и основы алгоритмизации 3
МИНИСТЕРСТВО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ ГОСУДАРСТВЕННОЕ ОБЩЕОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ КАМСКАЯ ГОСУДАРСТВЕННАЯ ИНЖЕНЕРНО - ЭКОНОМИЧЕСКАЯ
Использование Prolog совместно с другими ЯП
Понятие Dll. Вспомним процесс программирования в DOS. Преобразование исходного текста в машинный код включал в себя 2 процесса: компиляцию и линковку. Во время линковки в код программы помещались не только объявления функций и процедур, но и их полный код.
Вставка и редактирование формул
Лабораторная работа №6. Вставка и редактирование формул Что осваивается и изучается? Вызов формульного редактора Equation Editor Ввод и редактирование математических формул
Юридический анализ содержания мифов народов мира
Сизиф бросил вызов Богам. Когда пришло время умирать, он попытался сбежать из преисподней. За это Боги решили его наказать: вечно он должен был вкатывать огромный камень в гору, откуда тот неизменно скатывался вниз, и все нужно было начинать сначала. Боги полагали, что на свете нет ничего ужасней, чем тяжёлая и бесполезная работа.
Асемблер Задание 3 - вар2
LXI H, 8100 ;задание адреса первого элемента (HL:=8100H) ;задание кол-ва элементов XRA A ;обнуление аккумулятора ;обнуление регистра C (счетчик переполнений)
Асемблер Контрольна - вар1
Задача #1 Найти значение функции M3=(B+E-73H)+M2-(M1+7AH)-D LDA 8150 ;M1→A ADI 7A ;A:=A+7AH MOV C, A ;A→C LDA 8160 ;M2→A SUB C ;A:=A-C