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() може повертати значення будь-якого типу. Вибір типу повинен диктуватися потребами конкретних програм.


 

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

979. Транспортно-финансовый план автотранспортного предприятия 1.82 MB
  Расчет опорной производственной программы предприятия, определение финансовых результатов производственной деятельности АТП, разработка организационно-технических мероприятий, направленных на повышение эффективности работы предприятия и достижения поставленных целей, расчет проектируемой производственно программы для предприятия.
980. Аналіз економічного та соціального розвитку в Україні та місті Харкові 1021 KB
  Огляд теоретичних основ, становлення та проблематика місцевого самоврядування в Україні та м. Харкові. Стратегії та технології в системі планування та управління містом. Аналіз програми економічного і соціального розвитку м. Харкова на 2005 рік.
981. Система энергоснабжения подводного аппарата привязного типа 1.01 MB
  Энергоснабжение привязного малогабаритного телеуправляемого подводного аппарата, предназначенного для решения широкого круга задач – от макетирования новых элементов в структуре подводного аппарата до проведения обзорных и поисково-спасательных работ.
982. Расчет параметров защиты трансформаторов 691.5 KB
  Проектирование релейной защиты трансформаторов и автотрансформаторов. Продольная дифференциальная токовая защита с реле типов РНТ-560 и ДЗТ-11. Расчет уставок срабатывания с балансировкой токов плеч на автотрансформаторах тока. Максимальная токовая защита от междуфазных повреждений. Максимальная токовая защита от замыканий на землю.
983. Организация работы ОАО Костромская ГРЭС в условиях реструктуризации в электроэнергетике 386.5 KB
  Основой энергетики сегодняшнего дня являются топливные запасы угля, нефти и газа, которые удовлетворяют примерно девяносто процентов энергетических потребностей человечества. Динамика изменения тарифа на электроэнергию за 1999 - 2001 года.
984. Железобетонные плиты перекрытия и покрытия 427.5 KB
  Тепловая обработка входит в технологический процесс изготовления железобетонных изделий и занимает 70-80 % времени всего цикла изготовления изделий. Проектируемый цех по производству многопустотных плит перекрытий производительностью 19000 м3/год планируется разместить на территории действующего завода ОАО СЖБ-3 в городе Витебске.
985. Разработка аппаратной части системы автокалибровки и измерения скалярных параметров СВЧ устройств на базе современных микроконтроллеров 674 KB
  Классификация аппаратуры измерения комплексных параметров СВЧ сигнала. Требования к разрабатываемой системе и постановка задачи. Состав каждого комплекта прибора и требования к конструкции. Разработка аппаратной части измерительной системы Р2- Растр.
986. Месторождение Тенгиз 676 KB
  Геолого-промысловая характеристика месторождения. Определение забойных давлений оценка коэффициентов продуктивности скважин по данным поверхностных замеров. Оценка эффективности закачки газа по результатом гидродинамических исследований скважин. Основы системы оперативного контроля за разработкой нефтегазоконденсатных месторождений на начальной стадии.
987. Проектирование сопроцессора для умножения чисел в обратном коде 417.5 KB
  Разработка функциональной схемы операционного автомата. Особенности реализации Узлов спецпроцессора выполненных на реальных микросхемах. Разработка структурной схемы управляющего автомата. Описание функциональных узлов операционного автомата.