Статья

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

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

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

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

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

от 25%

Подписываем

договор

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

Скидка 25% при заказе до 8.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. Реферат Культурный туризм 2
2. Биография на тему Иван IV Грозный 1530-84
3. Сочинение на тему Павел и Николай Петрович Кирсановы в романе ИСТургенева Отцы и дети
4. Реферат Природные основы общественной жизни 2
5. Сочинение на тему Сучасная беларуская паэзiя яе тэмы i вобразы на прыкладзе творчасцi 2-3 паэтау
6. Реферат на тему Педагогічні умови стимулювання активності студентів вищих педагогічних навчальних закладів до фізкультурної
7. Контрольная работа на тему Права граждан Российской Федерации на социальную защиту
8. Реферат на тему Шовный материал
9. Реферат на тему Biography Of HG Wells Essay Research Paper
10. Реферат на тему Peanut Butter Allergies Essay Research Paper Company