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


 

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

86062. Учет расчетов по социальному страхованию и обеспечению 503 KB
  В качестве объекта налогообложения по единому социальному налогу признаются выплаты в виде материальной помощи безвозмездные выплаты в натуральной форме производимые сельскохозяйственной продукцией и или товарами для детей в части сумм превышающих 1000 руб.
86063. Подсчет резервов увеличения суммы прибыли и рентабельности на ООО ПКФ «Консалекс» 608 KB
  Анализ прибыли и рентабельности предприятия позволяет выявить большое число тенденций развития, призван указать руководству предприятия пути дальнейшего успешного развития, указывает на ошибки в хозяйственной деятельности, а также выявить резервы роста прибыли, что в конечном счете позволяет предприятию...
86064. Расчёт характеристик ТТЛ транзистора со сложным инвертором 2.03 MB
  На базе 5В. Этого достаточно, что бы открыть pn переход. Эмиторный переход открыт; коллекторный переход открыт. Т3 переходит в режим насыщения. Как только переход открывается, на базе остаётся напряжение 0,7В, а остальное падает.
86065. Предложения по совершенствованию существующей системы управления ЗАО «ЦАС» 573.2 KB
  Изучение общей характеристики деятельности организации, её технико-экономических показателей, экономической политики, положения на рынке, связей с другими организациями и государственными службами. Построение организационной структуры предприятия.
86066. Въездной туризм в странах ЕС 463.5 KB
  Туризм давно стал насущной необходимостью и неотъемлемой частью жизни каждого человека, который рано или поздно ощущает потребность отправиться в путешествие. Каждый человек представляет себе туризм достаточно индивидуально, но все-таки общим для всех туристов является желание познать мир...
86067. Виды организационно- правовых форм в соответствии с Российским законодательством 284.5 KB
  Почему существуют фирмы. Создатель такой фирмы ее единоличный хозяин который ни с кем не обязан делиться своей чистой прибылью чистая прибыль это часть прибыли которая остается в распоряжении хозяйственной организации после уплаты налогов и других обязательных платежей. Владелец такой фирмы с одной стороны единолично распоряжается прибылью полученной в результате ее хозяйственной деятельности а с другой стороны несет единоличную ответственность по всем обязательствам данной фирмы. Это означает что в случае необходимости...
86068. Маркетинг товаров новейшей технологии 482 KB
  Маркетинг является разноплановой концепцией. Прежде всего, он известен как философия бизнеса, направленная на выявление потребностей потребителей, целевых рынков, которые данная организация может удовлетворить наилучшим образом путем производства соответствующих продуктов, на то, чтобы каждый...
86070. Моделирование системы массового обслуживания 780.5 KB
  Большой класс систем которые сложно изучить аналитическими способами но которые хорошо изучаются методами статистического моделирования сводится к системам массового обслуживания СМО. Системы массового обслуживания СМО представляют собой системы специального вида реализующие многократное выполнение однотипных задач.