67301

Перевантаження оператора «()»

Лекция

Информатика, кибернетика и программирование

Можливо, найбільш інтригуючим оператором, якого можна перевантажувати, є оператор виклику функції "()". Під час його перевантаження створюється не новий спосіб виклику функцій, а операторна функція, якій можна передати довільну кількість параметрів.

Украинкский

2014-09-07

34.5 KB

0 чел.

Лекція № 12

Тема: Перевантаження оператора "()"

    Можливо, найбільш інтригуючим оператором, якого можна перевантажувати, є оператор виклику функції "()". Під час його перевантаження створюється не новий спосіб виклику функцій, а операторна функція, якій можна передати довільну кількість параметрів. Почнемо з такого прикладу. Припустимо, що певний клас містить наведене нижче оголошення перевантаженої операторної функції:

int operator()(int a, char *p);

І якщо у програмі створюється об'єкт obj цього класу, то настанова

obj(99, "перевантаження");

перетвориться в такий виклик операторної функції operator():

operator()(99, "перевантаження");

    У загальному випадку при перевантаженні оператора виклику функцій "()" визначаються параметри, які необхідно передати функції operator(). Під час використання оператора "()" у програмі задані аргументи копіюються в ці параметри.

    Як завжди, об'єкт, який здійснює виклик операторної функції (obj у наведеному прикладі), адресується показником this.

    Розглянемо приклад перевантаження оператора виклику функцій "()" для класу kooClass. Тут створюється новий об'єкт класу kooClass, координати якого є результатом підсумовування відповідних значень координат об'єкта і значень, що передаються як аргументи.

Приклад1. Демонстрація механізму перевантаження оператора виклику функцій "()"

class kooClass

{          int x, y, z;                 // Тривимірні координати

    public:

          kooClass() { x = y = z = 0; }

          kooClass(int c, int d, int f) {x = c; y = d; z = f; }

          kooClass operator()(int a, int b, int c);

          void Show(char *s);

};

     // Перевантаження оператора виклику функцій "()".

kooClass kooClass::operator()(int a, int b, int c)

{

kooClass tmp;                     // Створення тимчасового об'єкта

tmp.x = x + a;

tmp.y = y + b;

tmp.z = z + c;

return tmp;                        // Повертає модифікований тимчасовий об'єкт

}

     // Відображення тривимірних координат x, y, z.

void kooClass::Show(char *s)

{          cout << "Координати об'єкта <" << s << ">: ";

           cout << "x= " << x << ", y= " << y << ", z= " << z << endl;

}

void main()

{        kooClass ObjA(1, 2, 3), ObjB;

        ObjB = ObjA(10, 11, 12);         // Виклик функції operator()

        ObjA.Show("A");

        ObjB.Show("B");

}

   Внаслідок виконання ця програма відображає на екрані такі результати:

Координати об'єкта <A>: x= 1, y= 2, z= 3

Координати об'єкта <B>: x= 11, y= 13, z= 15

   Не забувайте, що при перевантаженні оператора виклику функцій "()" можна  використовувати параметри будь-якого типу, та і сама операторна функція operator() може повертати значення будь-якого типу. Вибір типу повинен диктуватися потребами конкретних програм.


 

А также другие работы, которые могут Вас заинтересовать

37622. Создание единого информационного пространства образовательного учреждения 23.07 KB
  Одним из важнейших направлений информатизации современного общества является информатизация образования - процесс обеспечения сферы образования теорией и практикой разработки и использования современных информационных технологий, ориентированных на реализацию психолого - педагогических целей обучения и воспитания.
37623. Составление плана осмотра объекта 61.83 KB
  Цель задачи: Определить сроки осмотра объекта по всем поданным объектам. Требуется: Вывести план выезда страхового агента на объект. Организационноэкономическая сущность: Данная задача предназначена для того чтобы направить страхового агента на объект в соответствии с желаемой датой указанной клиентом.
37624. Економіка інтелектуальної власності 172 KB
  Економіка інтелектуальної власності. Права на об’єкти інтелектуальної власності як товару. Особливості права інтелектуальної власності як товару. Інтелектуальна власність як нематеріальний актив.
37625. Учет рисков в страховании 63.17 KB
  Дано: Ведомость предварительной стоимости объекта страхования Справочник клиентов Заявка от клиента. Требуется: Определить предварительный расчет рисков по объекту страхования. Периодичность и область применения: Предварительный расчет рисков по объектам страхования на момент запроса составляется при поступлении заявки. Техноэкономическая эффективность: Автоматизированное составление вывести предварительный расчет рисков по объектам страхования на момент запроса существенно повысит эффективность работы организации.
37626. Расчет полной стоимости объекта страхования 61.45 KB
  Цель задачи: Осуществить полной расчет стоимости объекта страхования. Дано: Предварительный расчет рисков по объекту страхования Нормативы по скидочным предложениям Справочник объектов страхования Ведомость предварительной стоимости объекта страхования. Требуется: Произвести окончательный расчет рисков страхования.
37627. МЕТОДЫ СОРТИРОВКИ 22.16 KB
  ОТЧЕТ ПО ЛАБОРАТОРНОЙ РАБОТЕ №1 Тема: МЕТОДЫ СОРТИРОВКИ ОТЧЕТ ВЫПОЛНИЛ СТУДЕНТ ГР. Постановка задачи Выполнить сравнение трех видов сортировки: метод вставки метод стандартного обмена метод пузырька и метод простого выбора. Метод вставки
37628. Теоретично-експериментальні дослідження продуктивності стрілового крана на лабораторній моделі діючого комплексу 1.46 MB
  Стрілові крани – являють собою вантажопідйомні машини загальнопромислового і спеціального призначення. Вони можуть бути стаціонарними, пересувними, повно поворотними, неповно поворотними.
37629. Циклы в Pascal 25.7 KB
  Теоретическое введение Операторы цикла Операторы цикла используются для вычислений повторяющихся многократно. Блок ради выполнения которого и организуется цикл называется телом цикла. Проверка условия продолжения цикла и модификация параметра цикла. Один проход цикла называется итерацией.
37630. Табличный процессор MS EXCEL. Создание таблицы с расчетными формулами. Использование мастера функций 128 KB
  В левой части строки формул находится поле имен где содержится адрес выделенной ячейки или размер выделяемого диапазона. В средней части строки формул расположены три кнопки предназначенные для ввода и последующей обработки содержимого ячейки. Первая кнопка с крестиком позволяет отменить последнее действие по вводу или редактированию содержимого ячейки. Правая часть предназначена для отображения содержимого выделенной ячейки.