Referat.me

Название: Вызов Функции

Вид работы: статья

Рубрика: Информатика и программирование

Размер файла: 13.49 Kb

Скачать файл: referat.me-140426.docx

Краткое описание работы: Вызов функции, то есть запись выражение (список_выражений), можно проинтерпретировать как бинарную операцию, и операцию вызова можно перегружать так же, как и другие операции.

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

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

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

  • Операторы цикла

    Для реализации циклических алгоритмов, т.е. алгоритмов, содержащих многократно повторяющиеся одинаковые операции, применяются специальные операторы цикла. В Пас-кале есть три вида циклов: FOR, WHILE и REPEAT.

  • Перегрузка операций

    Настоящий класс ostream определяет операцию

  • Определяемое Преобразование Типа

    Конструкторы. Операции Преобразования. Неоднозначности.

  • Основные операторы языка Turbo-Paskal. Процедуры и функции

    Принцип работы основных операторов языка программирования Turbo-Paskal: оператор присваивания, выбора Case, безусловного перехода, цикла, уловный, составной. Формальное описание и вызов функции и процедуры. Требования к списку фактических параметров.

  • Задачи синтеза оптимальных систем управления

    Сущность статистического синтеза: поиск и реализация оптимальных свойств (структуры и параметров) системы по заданным статистическим характеристикам входных воздействий. Методы статистической оптимизации. Постановка задачи Винера–Колмогорова и ее решение.

  • Система команд. Структура слова команд. Синтаксис команд. Группы команд

    Типы команд, синтаксис ассемблера и код операции, по которому транслируется команда. Команды вычисления и непосредственной пересылки данных между регистрами. Поле для определения операции вычисления. Управление последовательностью выполнения программы.

  • Логические операторы VB

    В Visual Basic можно выделить пять основных и важных логических операторов: And, Or, Not, Xor и Eqv.

  • Микроконтроллеры семейства MCS51 Intel

    Инструкции MCS51 Intel Инструкции, модифицирующие флаги (1) Инструкция C OV AC Инструкция C OV AC CLR C ADDC CPL C SUBB ANL C,bit ANL C,/bit ORL C,bit ORL C, bit

  • Программа на языке Паскаль, реализующая операции над множествами

    Объединение, пересечение, разность, симметричная разность и декартовое произведение множеств. Реализация на одном из языков программирования программы, способной выполнять операции над множествами. Список основных идентификаторов переменных и процедур.

  • Форматированный ввод

    Лисповская функция чтения READ. Интерпретатор. Вызов READ. Построенные структуры. Внешние устройства и доступ к ним. Типы потоков и операции используемые для ввода и вывода. Действие макроса. Запись символов и макроинтерпретаций. Системная переменная.