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


 

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

21840. Возведение каменных зданий 113 KB
  В зависимости от нагрузки и условий работы для обеспечения устойчивости и повышения несущей способности отдельных элементов столбов стенок простенков их усиливают стальной арматурой. Отделочные и специальные работы отличаются большим разнообразием и выполняются по дизайнпроектам. Таблица 52 Цикл Наименование процессов Очерёдность выполнения работ Подземная часть Устройство котлована траншей под фундаменты. Отделочные и специаль ные работы Отделочные работы: штукатурные малярные плиточные столярные...
21841. Монтаж крупнопанельных зданий 107.5 KB
  Конопатка швови другие работы по стыкам внутри здания. бетонные работы.Специальные работы 1 этапа. Плиточные работы.
21842. Возведение одноэтажных промышленных зданий 111.5 KB
  L ширина пролёта; b шаг колонн; продольные и поперечные оси; обозначения осей. Размеры пролётов связаны с определёнными высотами и шагом колонн грузоподъёмностью крана и подкрановыми габаритами. Несущий каркас в виде железобетонных рам образованных защемлёнными в фундаментах колоннами и шарнирно опирающимися на них стропильными фермами или балками обеспечивает поперечную жёсткость здания. что позволяет увеличивать шаг колонн 36м.
21843. Рамно-шарнирный индикатор (РШИ) 59 KB
  База РШИ оборудована кольцевыми подмостями и поворотными люльками расположенными в уровне верхнего и нижнего этажей яруса колонн. За базовую модификацию принят РШИ для ячейки 6х6м с двухэтажной разрезкой колонн. Комплект монтажного оснащения должен включать не менее 4х РШИ иметь свой номер определяющий положение в цепи и устанавливаться в одноименные ячейки по вертикали.
21844. Монтаж каркасных многоэтажных зданий 78 KB
  Все размеры несущих и ограждающих конструкций кратны номинальным размерам с восприятием горизонтальных усилий жёсткими узлами рам; связевой при которой колонны работают только на вертикальные нагрузки а горизонтальные воспринимаются системой вертикальных дисков и ядер жёсткости; и рамнопланировочного модуля 05м и высотного 06м. Сетка колонн кратна укрупнённому планировочному модулю 15м. Промышленные здания выполняются из железобетонных элементов с сеткой колонн 6х6 или 6х9м высотой этажей 3672м количество этажей от 2 до 12 с...
21845. Управление риском. Основные понятия и определения 97.5 KB
  Все участники проекта заинтересованы в том чтобы исключить возможность провала проекта или хотя бы убытка для себя. Вместе с тем ни у кого из них нет и не может быть уверенности в благополучном исходе проекта риск в любом реальном деле общепризнан. Под неопределенностью понимается неполнота или неточность информации об условиях реализации проекта в том числе о связанных с ними затратах и результатах. Неопределенность связанная с возможностью возникновения в ходе реализации проекта неблагоприятных ситуаций и последствий характеризуется...
21846. Реализация проекта и обратная связь 76.5 KB
  Реализация проекта и обратная связь. Организационные формы управления проектами Структуры управления проектами Это понятие включает в себя вопервых организационные формы и вовторых организационные структуры управления проектом Под организационной структурой управления проектом понимают совокупность взаимосвязанных органов управления расположенных на различных ступенях системы. Использование системы управления проектами предполагает создание специальной группы которая становится самостоятельным участником проекта или структурно входит...
21847. Управление качеством проекта 88 KB
  В чем же здесь роль управления проектами и чем новая система может помочь Оказывается весьма многим прежде всего потому что обеспечение требуемого уровня качества есть задача организационноэкономическая и проектменеджер оказался именно той фигурой которая в состоянии вооружившись методологией управления проектами навести должный порядок в сложном и потому зачастую хаотичном мире среды и окружения проекта. Задача обеспечения качества на должном уровне пронизывает весь жизненный цикл проекта. А потому задача этой главы показать не...
21848. Человеческие аспекты в управлении проектами 49 KB
  Создание проектной команды. В практике проектменеджмента используются два основных вида структуры проектной команды. Матричная форма структуры команды Эта форма применяется как правило для малых и средних проектов продолжительность жизненного цикла которых до двух лет этот критерий в разных странах варьируется от 05 до 2 лет. Преимущества: гибкость в организации и развитии команды; полномочия функциональных отделов фирмы не дублируются; наличие у членов команды уверенности в завтрашнем дне .