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

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

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

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

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

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

от 25%

Подписываем

договор

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

Скидка 25% при заказе до 29.4.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. Запада Введение Дисциплина История русского Севера и СевероЗапада читалась раньше на кафедре Регио.html
3. ГРАЖДАНСКОЕ ОБЩЕСТВО- СОДЕРЖАНИЕ СТРУКТУРА ПРИЗНАКИ
4. Почва, ее состав и особенности
5. Организация учета движения производственных запасов
6. Олимпиада Обществознание
7. Атомно-молекулярное учение
8. РЕФЕРАТ дисертації на здобуття наукового ступеня кандидата педагогічних наук ІваноФран
9. Планирование профессиональной карьеры Бессмертие поэта ~ в его стихах бессмертие художника ~ в е
10. Комплексный механизм управления предприятием