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


 

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

34211. Палеонтология 19.49 KB
  Остатки организмов сохраняются в осадочных породах только при благоприятных условиях захоронения и при наличии минерального или органического скелета. видов животных и растений но после гибели они исчезают бесследно если не попадут в благоприятные условия для их сохранения поэтому в ископаемом состоянии сохраняется лишь незначительная часть от большого числа ранее существовавших организмов. Лучше сохраняются остатки организмов обладающих твёрдым минеральным скелетом. Палеонтология связана с зоологией и ботаникой изучающими морфологию и...
34212. Образование ориктоценозов 20.78 KB
  Выделяют три основных этапа перехода: накопление органических остатков захоронение фоссилизация 1. Накопление органических остатков. Скопления остатков погибших организмов образуют танатоценоз сообщество смерти.
34213. Основные этапы развития палеонтологии 29.91 KB
  Большое значение в развитии палеонтологии имели труды шведского учёного Карла Линнея 1707 1778 гг. Становление и развитие палеонтологии происходило в три этапа: додарвиновский дарвиновский и последарвиновский. Додарвиновский этап развития палеонтологии связан с именами таких учёных как англичанин Вильям Смит 1769 1839 палеозоология беспозвоночных Жорж Кювье 1769 1832 палеозоология позвоночных Александр Броньяр 1801 1876 палеоботаника .
34214. Палеонтологический метод и основы стратиграфической классификации 21.23 KB
  Изучается литологический состав отдельных слоёв их взаимоотношение друг с другом причём принимается что при ненарушенном залегании подстилающей слой является более древним а покрывающий более молодым принцип Стенона. Если же между ними наблюдается стратиграфическое несогласие то предполагается наличие перерыва в осадконакоплении а также возможность размыва нижележащих слоёв. Из каждого слоя или группы слоёв изучается систематический состав биоценозов. При извлечении из слоёв ископаемых остатков отмечаются особенности их захоронения...
34215. Породообразующая роль организмов 36.03 KB
  В образовании органогенной породы принимают участие как скелетные остатки так и продукты жизнедеятельности. В органическом породообразовании самую большую роль играют высшие растения. Организмы принимают участие и в образовании особых известковых форм рельефа океанов и морей рифовых построек различного типа: береговые и барьерные рифы атоллы биостромы биогермы. В образовании ископаемых и современных рифов принимают участие различные организмы.
34216. Условия обитания животных в океанах и морях 22.64 KB
  Водя является легко проницаемой средой для активно передвигающихся животных. Существование в воде водорослей и бактерий обеспечивает жизнь очень многих животных. Скопление органического детрита поступающего с суши обеспечивает обильное развитие водорослей бурых зелёных багряных а те в свою очередь создают благоприятные условия для жизни многих животных фораминифер червей моллюсков иглокожих ракообразных.