Статья

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

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

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

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

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

от 25%

Подписываем

договор

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

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



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

Вызов функции, то есть запись выражение (список_выражений), можно проинтерпретировать как бинарную операцию, и операцию вызова можно перегружать так же, как и другие операции. Список параметров функции 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. Курсовая Тяговые и динамические характеристики автомбиля ВАЗ 21074-20
2. Реферат на тему Іноземний досвід ведення бухгалтерського обліку
3. Реферат Влияние климата на здоровье человека
4. Лекция на тему Прогнозирование и планирование в экономике
5. Реферат на тему Sue The Dinosaur Essay Research Paper Sue
6. Лекция Показатели надежности восстанавливаемого объекта
7. Реферат Леса-легкие нашей планеты
8. Реферат на тему Острый инфаркт миокарда
9. Биография на тему Илья Муромец святой богатырь
10. Реферат на тему Comparision Of Judaism And Zoroastrianism Essay Research