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

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

Вызов функции, то есть запись выражение(список_выражний), можно проинтерпретировать как бинарную операцию, и операцию вызова можно перегружать так же, как и другие оперции. Список параметров функции operator() вычисляется и прверяется в соответствие с обычными правилами передачи парметров. Перегружающая функция может оказаться полезной главным образом для определения типов с единственной операцей и для типов, у которых одна операция настолько преобладет, что другие в большинстве ситуаций можно не принимать во внимание.

Для типа ассоциативного массива assoc мы не определили итератор. Это можно сделать, определив класс assoc_iterator, работа которого состоит в том, чтобы в определенном порядке поставлять элементы из assoc. Итератору нужен доступ к даным, которые хранятся в assoc, поэтому он сделан другом:

class assoc (* friend class assoc_iterator; pair* vec; int max; int free; public: assoc(int); int amp; operator[](char*); *);

Итератор определяется как

class assoc_iterator(* assoc* cs; // текущий массив assoc int i; // текущий индекс public: assoc_iterator(assoc amp; s) (* cs = amp;s; i = 0; *) pair* operator()() (* return (i«cs-»free)? amp;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 «« « “; *)

0 Итераторный тип вроде этого имеет преимущество перед нбором функций, которые выполняют ту же работу: у него есть собственные закрытые данные для хранения хода итерации. К тму же обычно существенно, чтобы одновременно могли работать много итераторов этого типа.

Конечно, такое применение объектов для представления итераторов никак особенно с перегрузкой операций не связано. Многие любят использовать итераторы с такими операциями, как first(), next() и last() (первый, следующий и последний).

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

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

Из книги C++ автора Хилл Мюррей

6.8 Вызов Функции Вызов функции, то есть запись выражение(список_выражний), можно проинтерпретировать как бинарную операцию, и операцию вызова можно перегружать так же, как и другие оперции. Список параметров функции operator() вычисляется и прверяется в соответствие с


R.5.2.2 Вызов функции

Из книги Справочное руководство по C++ автора Страустрап Бьярн

R.5.2.2 Вызов функции Вызов функции является постфиксным выражением, за которым следует, возможно пустой, список выражений в скобках, разделенных запятой. Эти выражения образуют фактические параметры функции. Постфиксное выражение должно иметь тип "функция, возвращающая T",


Вызов функций

Из книги HTML 5, CSS 3 и Web 2.0. Разработка современных Web-сайтов автора Дронов Владимир

Вызов функций После объявления функции ее можно вызвать из любого Web-сценария, присутствующего на этой же Web-странице. Формат вызова функции:<имя функции>([<список фактических параметров, разделенных запятыми>])Здесь указывается имя нужной функции и в круглых


8.15. Вызов виртуальной функции родительского класса

Из книги C++. Сборник рецептов автора Диггинс Кристофер

8.15. Вызов виртуальной функции родительского класса ПроблемаТребуется вызвать функцию родительского класса, но она переопределена в производном классе, так что обычный синтаксис p->method() не дает нужного результата.РешениеУкажите полное имя вызываемого метода, включая


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

Из книги Язык программирования Си для персонального компьютера автора Бочков C. О.

Вызов функции Вызов функции передает управление и фактические аргументы (если они есть) заданной функции. Синтаксически вызов функции имеет следующий вид:<выражение>([<список выражений>])<Выражение> вычисляется, и его результат интерпретируется как адрес


Вызов функции с переменным числом аргументов

Из книги Linux: Полное руководство автора Колисниченко Денис Николаевич

Вызов функции с переменным числом аргументов Для вызова функции с переменным числом аргументов не требуется никаких специальных действий: в вызове функции просто задается то число аргументов, которое нужно. В предварительном объявлении (если оно есть) переменное число


21.1.1. Вызов gcc

Из книги Macromedia Flash Professional 8. Графика и анимация автора Дронов В. А.

21.1.1. Вызов gcc Формат вызова компилятора такой:gcc [опции] helloworld.сВы написали свою программу на С++? Нет проблем: компиляторы С и С++ являются интегрированными. Чтобы сообщить компилятору, на каком языке вы писали свою программу, нужно указать определенную опцию при вызове


Вызов функций

Из книги Язык Си - руководство для начинающих автора Прата Стивен

Вызов функций После того как мы объявили функцию, мы можем вызвать ее из любого места кода в пределах области видимости. Для этого используется следующий формат: <Имя функции>([<Список фактических параметров, разделенных запятыми>]) Здесь указывается имя нужной


Вызов функции с аргументом: фактические аргументы

Из книги Linux и UNIX: программирование в shell. Руководство разработчика. автора Тейнсли Дэвид

Вызов функции с аргументом: фактические аргументы      Задача в данном случае состоит в том, чтобы присвоить некоторую величину формальному аргументу number. После того как эта переменная получит свое значение, программа сможет выполнить свою задачу. Мы присваиваем


9.1. Вызов awk

Из книги C++ для начинающих автора Липпман Стенли


7.9.3. Вызов

Из книги UNIX: разработка сетевых приложений автора Стивенс Уильям Ричард

7.9.3. Вызов Указатель на функцию применяется для вызова функции, которую он адресует. Включать оператор разыменования при этом необязательно. И прямой вызов функции по имени, и косвенный вызов по указателю записываются одинаково:#includeint min( int*, int );int (*pf)( int*, int ) = min;const int iaSize


17.5.3. Статический вызов виртуальной функции

Из книги автора

17.5.3. Статический вызов виртуальной функции Вызывая виртуальную функцию с помощью оператора разрешения области видимости класса, мы отменяем механизм виртуализации и разрешаем вызов статически, на этапе компиляции. Предположим, что мы определили виртуальную функцию isA()


Многократный вызов функции connect для сокета UDP

Из книги автора

Многократный вызов функции connect для сокета UDP Процесс с присоединенным сокетом UDP может снова вызвать функцию connect Для этого сокета, чтобы:? задать новый IP-адрес и порт;? отсоединить сокет.Первый случай, задание нового собеседника для присоединенного сокета UDP, отличается


Вызов

Из книги автора

Вызов Вызвать любого человека из вашего контакт-листа можно несколькими способами. Во-первых, просто щелкнуть по нему мышкой. Или щелкнуть мышкой – но уже правой кнопкой, чтобы появилось контекстное меню – в этом случае мы можем точно выбрать вид связи, либо просто