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


 

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

46572. Метод дисконтирования при оценке недвижимости 20.6 KB
  Метод дисконтированных денежных потоков наиболее универсальный метод позволяющий определить настоящую стоимость будущих денежных потоков. Метод ДДП позволяет оценить стоимость недвижимости на основе текущей стоимости дохода состоящего из прогнозируемых денежных потоков и остаточной стоимости. Расчет стоимости объекта недвижимости методом ДДП осуществляется в следующей последовательности: 1.
46573. Роль ХХ столетия в мировой истории 20.67 KB
  Не случайно в большинстве экономически развитых стран у власти чередуются представители либеральных и умеренно-социалистических группировок. Однако подобное обстоятельство не устранило саму конкурентную борьбу лишь изменило ее формы. И хотя экономическое положение США в мировом сообществе уже не так прочно как преждетем не менее очевидно что правящая элита США будет прилагать все усилия для сохранения исключительного положения своей страны. Впрочем мировое развитие идет в направлении возрастания политического веса малых стран в мировой...
46575. Особенности и правовая охрана интеллектуальной собственности 20.7 KB
  Под объектом интеллектуальной собственности следует понимать конкретную разработку произведение представленную на материальном носителе. Объекты интеллектуальной собственности: Литературные художественные и научные произведения; Исполнительская деятельность артистов звукозаписи радио и телевизионные передачи; Изобретения во всех областях человеческой деятельности; Научные открытия; Промышленные образцы; Товарные знаки знаки обслуживания фирменные наименовании и коммерческие обозначения; Авторское право Авторское право...