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


 

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

16898. Объекты Math: редактор формул OpenOfficeorg 393.19 KB
  Лабораторная работа № 7 Объекты Math: редактор формул OpenOffice.org Оборудование: ПКПрограммное обеспечение: Windows OpenOffice.org WriterЦель работы: приобретение и закрепление практических навыков работы в текстовом процессоре Writer OpenOffice.org OOo имеет компонент для создания и ре
16899. Работа с таблицами в OpenOfficeorg 431.22 KB
  Лабораторная работа № 8 Работа с таблицами Оборудование: ПКПрограммное обеспечение: Windows OpenOffice.org WriterЦель работы: приобретение и закрепление практических навыков работы в текстовом процессоре Writer Таблицы являются полезным средством для организации и представл...
16900. Знакомство с программой KompoZer 818.5 KB
  Лабораторная работа Знакомство с программой KompoZer Цель работы: познакомиться с рабочей средой программы KompoZer научиться создавать сайт на основе шаблона 1.2 Технические средства Оборудование: ПК; Программное обеспечение: KompoZer Примерное время ра...
16901. Знакомство с программой KompoZer. Лабораторная работа 807 KB
  Лабораторная работа №9. Знакомство с программой KompoZer. Цели лабораторной работы: познакомиться с рабочей средой программы KompoZer создать сайт на основе шаблона. Описание пунктов меню в KompoZer можно просмотреть в файле Описание пунктов меню в KompoZer.doc. Панель инстр...
16902. РАХМАНИНОВ, СЕРГЕЙ ВАСИЛЬЕВИЧ 31.5 KB
  РАХМАНИНОВ СЕРГЕЙ ВАСИЛЬЕВИЧ Rakhmaninov 1873–1943 русский композитор и пианист. Родился 20 марта 1 апреля 1873 в имении Онег Новгородской губернии. Проявив интерес к музыке уже в четыре года обучался игре на фортепиано а в девять лет поступил на фортепианное отделение СанктПете...
16903. Римский-Корсаков Николай Андреевич 39.5 KB
  Римский Корсаков Николай Андреевич [618.3.1844 Тихвин 821.6.1908 усадьба Любенск близ Луги ныне Ленинградской области] русский композитор педагог дирижёр общественный деятель музыкальный писатель. Из дворян. Получил образование в петербургском Морском корпусе по окон
16904. СКРЯБИН, АЛЕКСАНДР НИКОЛАЕВИЧ 35.5 KB
  СКРЯБИН АЛЕКСАНДР НИКОЛАЕВИЧ 1872–1915 русский композитор и пианист. Родился 25 декабря 1871 6 января 1872 в Москве. Окончив Московскую консерваторию где занимался в частности у А.С.Аренского и С.И.Танеева Скрябин начал давать концерты и преподавать однако вскоре сосредоточ
16905. ПЕТР ИЛЬИЧ ЧАЙКОВСКИЙ 42.5 KB
  ПЕТР ИЛЬИЧ ЧАЙКОВСКИЙ Tchaikovsky Petr Ilich 1840–1893 русский композитор музыка которого отличается красочностью романтичностью и необычайным мелодическим богатством. Родился 25 апреля 7 мая 1840 в Воткинске Вятская губерния в семье начальника КамскоВоткинского завода горного...
16906. Шостакович, Дмитрий Дмитриевич 32.5 KB
  Шостакович Дмитрий Дмитриевич [1225.9.1906 Петербург 9.8.1975 Москва] советский композитор народный артист СССР 1954 Герой Социалистического Труда 1966 доктор искусствоведения 1965. Родился в семье инженера. Окончил Ленинградской консерваторию по классу фортепьяно у Л. В. Ни