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


 

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

38904. ОПРЕДЕЛЕНИЕ ВРЕМЕНИ И ЭНЕРГИИ УДАРА 2.35 MB
  Лаборатория Физические основы механики ЛАБОРАТОРНАЯ РАБОТА № ФМ5 ОПРЕДЕЛЕНИЕ ВРЕМЕНИ И ЭНЕРГИИ УДАРА ТРЕБОВАНИЯ ТЕХНИКИ БЕЗОПАСНОСТИ: Перед включением электроприборов проверить целостность шнуров питания вилки и заземление. ЦЕЛЬ РАБОТЫ: изучение перераспределения энергии соударяющихся тел определение времени удара. Удар называется центральным если в момент удара центры инерции сталкивающихся тел находятся на одной прямой. Различают два предельных случая удара абсолютно упругий и абсолютно неупругий.
38905. ИССЛЕДОВАНИЕ УПРУГОГО УДАРА 1.5 MB
  Лаборатория Физические основы механики ЛАБОРАТОРНАЯ РАБОТА № ФМ5 А ИССЛЕДОВАНИЕ УПРУГОГО УДАРА Методическое руководство подготовлено: к. Удар называется центральным если в момент удара центры инерции сталкивающихся тел находятся на одной прямой. Различают два предельных случая удара абсолютно упругий и абсолютно неупругий. После удара столкнувшиеся тела движутся вместе с одинаковой скоростью.
38906. ИЗУЧЕНИЕ ДВИЖЕНИЯ ТЕЛА ОТНОСИТЕЛЬНО ГЛАВНЫХ ОСЕЙ ИНЕРЦИИ 2.74 MB
  Лаборатория Физические основы механики ЛАБОРАТОРНАЯ РАБОТА № ФМ6 ИЗУЧЕНИЕ ДВИЖЕНИЯ ТЕЛА ОТНОСИТЕЛЬНО ГЛАВНЫХ ОСЕЙ ИНЕРЦИИ Составитель: к. ЦЕЛЬ РАБОТЫ: определение периодов колебаний и моментов инерции тел относительно главных осей инерции. КРАТКИЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ Моментом инерции тела относительно некоторой оси в физике называют величину равную сумме произведений элементарных масс из которых состоит тело на квадраты их расстояний до оси: Проекция момента импульса тела на ось вращения и угловую скорость связаны...
38907. Знакомство с методами измерения физических величин и оценкой погрешностей измерений 264.5 KB
  Лаборатория Физические основы механики ЛАБОРАТОРНАЯ РАБОТА № ФМ0 Знакомство с методами измерения физических величин и оценкой погрешностей измерений Руководство подготовлено доц. ЦЕЛЬ РАБОТЫ: Ознакомиться с прямыми и косвенными измерениями методами обработки результатов измерений. Чтобы найти значение как можно более близкое к истинному нужно проводить большее число измерений и на их основе вычислить среднее арифметическое значение. Чем больше число измерений тем ближе среднее значение к истинному.
38908. ОПРЕДЕЛЕНИЕ МОМЕНТА ИНЕРЦИИ ТЕЛА МЕТОДОМ КРУТИЛЬНЫХ КОЛЕБАНИЙ 612.5 KB
  Лаборатория Физические основы механики ЛАБОРАТОРНАЯ РАБОТА № ФМ1 ОПРЕДЕЛЕНИЕ МОМЕНТА ИНЕРЦИИ ТЕЛА МЕТОДОМ КРУТИЛЬНЫХ КОЛЕБАНИЙ Нормоконтроль: Переработано: к. ЦЕЛЬ РАБОТЫ: изучение вращательного движения тела на примере крутильных колебаний. Определение момента инерции твердого тела. КРАТКИЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ Абсолютно твёрдым телом называется тело которое ни при каких условиях не может деформироваться то есть расстояние между двумя точками или точнее между двумя частицами этого тела остаётся постоянным.
38909. Изучение прецессии лабораторного гироскопа 4.27 MB
  Окружности по которым движутся точки тела лежат в плоскостях перпендикулярных к этой оси. Эти векторы не имеют определённых точек приложения: они могут откладываться из любой точки оси вращения. Вектор направлен вдоль оси вращения в соответствии с правилом правого винта т. При вращении тела вокруг неподвижной оси вектор углового ускорения направлен вдоль оси вращения в сторону...
38910. Исследование законов вращательного движения на маятнике Обербека 1.08 MB
  ЦЕЛЬ РАБОТЫ: расчет момента инерции сложного тела исследование зависимости момента инерции от распределения массы внутри твердого тела от величины внешней силы и от ее плеча. КРАТКИЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ Абсолютно твёрдым телом называется тело которое ни при каких условиях не может деформироваться то есть расстояние между двумя точками или точнее между двумя частицами этого тела остаётся постоянным. При вращении твёрдого тела все его точки движутся по окружности центры которых лежат на одной прямой называемой...