У вас вопросы?
У нас ответы:) SamZan.net

Вызов Функции

Работа добавлена на сайт samzan.net: 2015-07-05

Поможем написать учебную работу

Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 20.2.2025

Вызов Функции

Вызов функции, то есть запись выражение (список_выражений), можно проинтерпретировать как бинарную операцию, и операцию вызова можно перегружать так же, как и другие операции. Список параметров функции 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() (первый, следующий и последний).

Список литературы

Для подготовки данной работы были использованы материалы с сайта http://www.realcoding.net




1. Вещества, из которых состоят растения
2. часов При массовом поступлении пораженных ХПГ ГОЗ оказывает хирургическую помощь в основном по жизненн
3. 2010 ггмлнтенге Атрибутивным рядом распределения предприятий является распределение по -форме собственн
4. Стрела Зенона и типы процессов
5. авторитарный; 2 либеральный; 3 демократический
6. Лабораторная работа2
7. Исследование бухгалтерского учета и аудита материалов на примере организации ООО
8. Тема- Правовое государство- Формирование и основные принципы Выполнила студентка.html
9. Специальный характер правового регулирования несостоятельности (банкротства)
10. Периоды жизни человека