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


 

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

74354. Цель расчета и математическая постановка задачи. Общая характеристика методов решения уравнений установившихся режимов 29 KB
  Общая характеристика методов решения уравнений установившихся режимов. Расчет и анализ электрических режимов реальных ЭС и систем передачи и распределения электроэнергии содержащих десятки сотни линий электропередачи и узлов нагрузки необходимо выполнять посредством программно-вычислительных комплексов на ЭВМ. Расчет установившихся режимов ЭС содержит два этапа: формирование уравнений и их решение. Расчет установившихся режимов состояний ЭС в классическом виде заключается в определении напряжений в узлах сети используя которые находят...
74355. РАСЧЕТ И АНАЛИЗ УСТАНОВИВШИХСЯ РЕЖИМОВ РАЗОМКНУТЫХ ЭЛЕКТРИЧЕСКИХ СЕТЕЙ 184 KB
  Электрической сетью называется совокупность линий электропередачи и преобразующих подстанций, предназначенная для передачи, распределения и доставки электрической энергии потребителям. Назначение распределительных сетей – снабжение потребителей электрической энергией нормированного качества
74356. РАСЧЕТ РЕЖИМА ЛЭП ПРИ ИЗВЕСНОМ НАПРЯЖЕНИИ В НАЧАЛЕ U1=const И МОЩНОСТИ НАГРУЗКИ В КОНЦЕ S1=const 140 KB
  Схема замещения линии электропередачи с обозначениями параметров электрического состояния Данный случай является наиболее общим. Расчет параметров режима линии выполняется итерационным путем в два этапа в такой последовательности. С начала зададим напряжение в конце линии например равным ожидаемому или номинальном. Тогда можно определить приближенно ток нагрузки...
74357. Расчет установившегося режима ЛЭП с несколькими электрическими нагрузками. Векторные диаграммы 2.25 MB
  Учитывая положение о качестве расчетов, последний будет иметь итерационный характер. Представим схему замещения не содержащую поперечных ветвей.
74358. РЕЖИМ ХХ ЛЭП 86 KB
  РЕЖИМ ХХ ЛЭП Режим холостого хода линии электропередачи ЛЭП возникает при отключении электрической нагрузки при включении линии под напряжение в первые часы после ее монтажа а также в период синхронизации включении на параллельную работу электрических систем посредством объединяющей их ЛЭП. Режим холостого хода является частным случаем рабочего режима ЛЭП однако выделим его отдельно ввиду заслуживающей внимания особенности и практической значимости для линий напряжением 220 кВ и выше. Справедливость такого допущения можно установить...
74359. Расчет режима сети с различными номинальными напряжениями 42.5 KB
  Пересчет сети к одному номинальному напряжению лучше выполнять в разветвленной части схеме. В данном случае таковой является участок содержащий ЛЭП 110 и трансформатор.
74360. ОБЩИЕ СВЕДЕНИЯ О РАСЧЁТЕ ЛЭП БОЛЬШОЙ ПРОТЯЖЕННОСТИ 686.5 KB
  Ток и напряжение в линии непрерывно изменяются по ее длине: ток из-за наличия поперечной проводимости Yo а напряжение за счет падения напряжения в сопротивлении Zo. Изменение напряжения и тока при волновом характере передачи энергии по линии наиболее точно описываются уравнениями длинной линии...