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


 

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

67895. НАЛОГОВЫЕ ДОГОВОРЫ ОБ ИЗМЕНЕНИИ СРОКОВ УПЛАТЫ НАЛОГОВ И СБОРОВ 86.5 KB
  Предоставление налогового кредита оформляется договором между уполномоченным на то органом и соискателем такого кредита. Жуков в экономическом аспекте данная отсрочка платежа в виде налогового кредита означает предоставление кредита.
67896. ДЕТЕРМИНИЗМ, ИНДЕТЕРМИНИЗМ ИЛИ СВОБОДА ВОЛИ? 104.5 KB
  Детерминизм (от лат. determino — определяю) — учение классической философии о закономерной универсальной взаимосвязи и взаимообусловленности явлений объективной действительности1. Понятие «детерминизм» возникло в средневековье как вид логического определения понятия, противостоящий генерализации...
67897. ПРАВО ДОЛЖНОСТНЫХ ЛИЦ ПРАВООХРАНИТЕЛЬНЫХ ОРГАНОВ НА ОЦЕНКУ СОБСТВЕННЫХ ДЕЙСТВИЙ 66 KB
  В Обращении к сотрудникам органов внутренних дел и военнослужащим внутренних войск МВД России министр внутренних дел Российской Федерации генерал-полковник милиции Р. Однако зачастую милиция может проявить свою самостоятельность и автономию применяя право милиции на оценку собственных действий...
67898. К ВОПРОСУ О ПОНЯТИИ КОРРУПЦИИ И ПУТЯХ ПРОТИВОДЕЙСТВИЯ ЕЙ 92.5 KB
  Особенности характерные для экономической преступности высокое общественное положение субъектов ее совершения изощренно интеллектуальные способы их действий огромный материальный физический и моральный ущерб ими причиняемый исключительная латентность экономических посягательств и снисходительное...
67899. ПРОБЛЕМЫ ОБЕСПЕЧЕНИЯ ЗАКОННОСТИ ПРИ ПРИМЕНЕНИИ МЕР АДМИНИСТРАТИВНОГО ПРЕСЕЧЕНИЯ 93 KB
  Исследование применения мер административного пресечения предполагает обращение к проблемам законности при осуществлении данного вида правоприменительной деятельности. К этому подвигает не только важность теоретического анализа механизма обеспечения законных прав и интересов при реализации...
67900. ПРИЧИНУ РОСТА ПРЕСТУПНОСТИ НАЗЫВАЕТ ХРИСТИАНСКАЯ АНТРОПОЛОГИЯ 130 KB
  Последние открытия генетиков и расшифровка генома человека позволили сделать вывод что почти все социальные проявления разумеется и преступное поведение человека запрограммированы. составила 296 против 345 в 1997 году безработных с другой а совсем в другом не во внешних обстоятельствах...
67901. СРАВНИТЕЛЬНЫЙ АНАЛИЗ СТАТУСА АДМИНИСТРАТИВНО-ТЕРРИТОРИАЛЬНЫХ ЕДИНИЦ В РОССИЙСКОЙ ФЕДЕРАЦИИ 81 KB
  В настоящее время административная карта Российской Федерации насчитывает 1863 района 650 городов республиканского областного краевого окружного подчинения 318 городских районов и округов более 400 городов районного подчинения около двух тысяч поселков городского типа и свыше 24 тысяч...
67902. ОСОБЕННОСТИ РЕАЛИЗАЦИИ СОВРЕМЕННОГО ЛИЦЕНЗИОННОГО ЗАКОНОДАТЕЛЬСТВА 260.5 KB
  О лицензировании отдельных видов деятельности который с одной стороны ограничил круг органов которые могут осуществлять лицензирование ст. Уменьшение числа лицензируемых видов деятельности следует связывать с появлением понимания ограничительной роли лицензионной системы и выявлением в ходе...
67903. СИСТЕМА ЛИЦЕНЗИРОВАНИЯ В МЕХАНИЗМЕ ВОЗДЕЙСТВИЯ НА ПОВЕДЕНИЕ СУБЪЕКТОВ ПРАВОВЫХ ОТНОШЕНИЙ 104.5 KB
  Общая часть объединяет нормы лицензионного права определяющие критерии выделения объектов лицензирования правовой статус субъектов лицензионных правоотношений в том числе полномочия лицензионных органов принципы лицензионного права сферу действия лицензионного законодательства...