Статья

Статья Вызов Функции

Работа добавлена на сайт bukvasha.net: 2015-10-29

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

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

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

от 25%

Подписываем

договор

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

Скидка 25% при заказе до 5.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. Реферат Названия психоседативных лекарственных средств
4. Диссертация на тему Проблеми адміністративно правового регулювання застосування спеці
5. Реферат на тему My Antonia Essay Research Paper My Antonia
6. Реферат Творча спадщина Софії Русової Періоду еміграції
7. Реферат на тему Эргономика в дизайне и эргономика рабочего места
8. Реферат на тему The True Authority
9. Курсовая Влияние почвенного плодородия на продуктивность лесообразующих пород
10. Реферат Участие прокурора в гражданском процессе 2 Характеристика научных