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


Полнотекстовый поиск по базе:

Главная >> Статья >> Информатика, программирование


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




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

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

Похожие работы:

  • Вызов функции в другом процессе

    Реферат >> Информатика, программирование
    Вызов функции в другом процессе Сергей Холодилов ... загрузки DLL. Получить адрес функции. Вызвать функцию при помощи CreateRemoteThread. ... функций и массива индексов функций. Base – базовое значение ординала экспортируемых функций. Для получения индекса функции ...
  • Функции в С++

    Статья >> Информатика, программирование
    ... { int t = *p; *p =*q; *q = t; } Чтобы избежать расходов на вызов функции, функцию можно описать как inline , а чтобы ... (*efct)("error"); // вызов error через efct } Чтобы вызвать функцию через указатель, например ...
  • Основные функции и компоненты ядра ОС UNIX

    Реферат >> Информатика, программирование
    ... и используется во всех последующих функциях. Вызов функции close(sd) приводит к закрытию ... используется системный вызов shutdown: shutdown(sd, mode); Вызов этой функции означает, ... их ликвидации все равно требуется вызов функции close. Замечание: приведенная в ...
  • Стандартные библиотечные функции С++

    Курсовая работа >> Информатика, программирование
    ... требуемый файл и обеспечить вызов соответствующих функций. Для использования библиотечного кода ... не обязательно содержащем вызов этой функции. Однако, если вызов функции содержится в файле ... sw(short k,char menu[9][30])//вызов функций { short kod=1; switch (k) ...
  • Основные операторы языка Turbo-Paskal. Процедуры и функции

    Реферат >> Информатика, программирование
    ... 2. Процедуры и функции 2.1 Описание функции 2.2 Формальное описание функции 2.3 Вызов функции 2.4 Формальное описание процедуры 2.5 Вызов процедуры ВЫВОДЫ ... любым простым или String.. 2.3 Вызов функции Вызов функции может осуществляться из основной программы ...
  • Подпрограммы (процедуры и функции)

    Реферат >> Информатика, программирование
    ... с именем функции, соотответствующего значения. Вызов функции будет следующим: G := Nod(Abs(E), F); Вообще, вызов функции может присутствовать ... натурального числа (т.к. функция Impossible содержит ее вызов, то в разделе описаний функция Number должна ...
  • Перехват API-функций в Windows NT/2000/XP

    Реферат >> Информатика, программирование
    ... параллельно выполняющийся поток произвел вызов той же функции. В результате управление будет ... из различных Dll. Откомпилированный вызов функции через таблицу импорта выглядит ... всякий раз, когда произойдет вызов функции MessageBoxA из программы. Поставим ...
  • JavaScript: полезные функции

    Реферат >> Информатика, программирование
    ... модифицируем меню, добавив в него вызов функций смены изображения. Для отслеживания ... onMouseOver и привяжем к нему вызов функции смены изображения: onMouseOver="change('pic1 ... ссылку на заменяющее изображение. Вызов же функции out() осуществляется и вовсе ...
  • Программа исследования функций

    Реферат >> Информатика, программирование
    ... приведён алгоритм работы данной функции. 2.6.3 Функция use_scroll Назначение: Осуществляет обработку ... , очистку экрана. Вызов функции оформления экрана. Опрос меню , вызов функций , соответствующих каждому ... 17,22,24,25,36 - Вызов функции. Блоки 29,45 - Конец ...
  • Обзор сетевых функций PHP

    Реферат >> Информатика, программирование
    ... ( $line) . "
    \n"; 4. } ?> Работа с сокетами Функция file() (равно как и fopen() ) позволяет ... указанным приоритетом в протокол). Функция closelog() закрывает соединение протокола. ... кодировку. В этом случае вызов функции mail должен быть произведен так ...