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


 

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

25818. Характеристика голоса (сила, высота, тембр) 15.02 KB
  Основные характеристики голоса 1.Сила голоса. Обеспечивается сила голоса силой выдоха.
25819. Теории голосообразования: милоэлаксическая, нейрохронаксическая 14.58 KB
  Основная суть образование голоса фонация происходит на фазе выдоха при участии воздушной струи и голосовых складок. При этом колебание голосовых складок происходит пассивно под действием воздуха. При поражении иннервации речевого аппарата происходит нарушение речи и голосообразования.
25820. Заболевания наружного носа и носовой полости: Атрезии 24 KB
  Заболевания наружного носа и носовой полости: Атрезии. Врожденные аномалии наружного носа в виде полного его отсутствия расщепления кончика носа двойного носа и пр. встречаются крайне редко и не имеют такого практического значения как врожденные и приобретенные изменения в полости носа ведущие к нарушению проходимости носовой полости для вдыхаемого и выдыхаемого воздуха. Сужение и зарастание полости носа.
25821. Травмы. Искривления носовой перегородки. Инородные тела носа 15.29 KB
  Инородные тела носа. У 80 людей перегородка носа может быть незначительно деформирована. Искривлённая перегородка носа обычно приводит к затруднению дыхания. Чаще всего причина искривления перегородки носа травмы.
25822. Острый и хронический ринит. Связь заболевания носа и среднего уха 14.78 KB
  Связь заболевания носа и среднего уха. Рини́т насморк синдром воспаления слизистой оболочки носа. Острый ринит возникает как следствие воздействия на слизистую оболочку полости носа вирусной или бактериальной инфекции. Поражение распространяется на обе половины носа.
25823. Полипы носа 14.67 KB
  Полипы носа. Назальные полипы обычно делят на антрохоанальные полипы и этмоидальные полипы. Несмотря на их удаление во время хирургического вмешательства назальные полипы возникают повторно примерно в 70 случаев. Она может быть проведена под общей или местной анестезией полипы удаляют при помощи эндоскопической хирургии.
25824. Заболевания полости рта. Дефекты губ и нёба 16.78 KB
  Дефекты губ и нёба. Аномалии твёрдого нёба: слишком высокое и узкое готическое плоское и низкое расщелины твёрдого нёба. Расще́лина нёба разрыв расщелина в средней части нёба возникающая вследствие не заращения двух половин нёба в период эмбрионального развития. Может быть поражена лишь часть нёба например только мягкое нёбо или язычок нёба или же расщелина может проходить по всей длине сочетаясь с билатеральными расщелинами в передней части верхней челюсти; нередко такие дети рождаются с расщелиной губы.
25825. Дефекты языка 13.97 KB
  Дефекты языка. К аномалиям развития языка относится прежде всего полное его отсутствие или аглоссия; недоразвитие языка микроглоссия или ненормально большой язык макроглоссия. Сравнительно частым дефектом развития является врождённое укорочение уздечки языка. При этом дефекте движения языка могут быть затруднены т.
25826. Дефекты челюстей и зубов. Прикусы: нормальный и патологический. Аномалии прикуса 15.92 KB
  Дефекты челюстей и зубов. Неправильное звукопроизношение особенно у детей вызывается различными дефектами строения челюстей которые ведут к аномалиям прикуса: прогнатией когда верхняя челюсть сильно выдается вперед; прогенией когда нижняя челюсть выступает вперед; открытым передним прикусом когда между верхними и нижними зубами при их смыкании остается промежуток; боковым прикусом когда при смыкании боковых зубов остаётся промежуток. Диастема аномалия положения зубов; чрезмерно широкий промежуток между резцами верхней...