68969

Перевантаження операторів. Дружні операторні функції

Лекция

Информатика, кибернетика и программирование

Перевантаження операторів за допомогою дружніх функцій Створення операторної функціїчлена З перевантаженням функцій тісно зв’язаний механізм перевантаження операторів. Операторні функції створюються за допомогою ключового слова opertor.

Украинкский

2014-09-28

31.5 KB

2 чел.

Лекція № 14

Тема: Перевантаження операторів. Дружні операторні функції.

План

1. Створення операторної функції-члена

2. Перевантаження операторів за допомогою дружніх функцій

Створення операторної функції-члена

З перевантаженням функцій тісно зв'язаний механізм перевантаження операторів. У мові C++ можна перенавантажувати більшість операторів, налаштувавши їх на конкретний клас. Наприклад, в класі, що підтримує стек, оператор "+" можна перевантажити для заштовхування елементів в стек, а оператор "-" — для виштовхування елементів. Перевантажений оператора зберігає своє первинне призначення. Просто набір типів, до яких його можна застосовувати, розширюється.

Перевантаження операторів — одна з найефективніших можливостей мови С++. Вона дозволяє повністю інтегрувати нові класи в існуюче програмне середовище. Після перевантаження операції над об'єктами нових класів виглядають точно так само, як операції над змінними вбудованих типів. Крім того, перевантаження операторів лежить в основі системи введення-висновку в мові C++.

Перевантаження операторів здійснюється за допомогою операторних функцій (operator function), які визначають дії перевантажених операторів застосовні до відповідного класу. Операторні функції створюються за допомогою ключового слова operator. Операторні функції можуть бути як членами класу, так і звичайними функціями. Проте звичайні операторні функції, як правило, об’являються дружніми по відношенню до класу, для якого вони перенавантажуються. У кожному з цих випадків операторна функція оголошується по-різному.

Операторна функція-член має наступний вигляд:

тип ім’я_класу: :operator# { список-аргументів)

{

...   //  Операції

}

Зазвичай операторна функція повертає об'єкт класу, з яким вона працює проте тип значення, що повертається, може бути будь-яким. Символ # замінюється необхідним оператором. Наприклад, якщо в класі перевантажується оператор ділення «/» операторна функція-член називається operator/. При перевантаженні унарного оператора список аргументів залишається порожнім. При перевантаженні бінарного оператора список аргументів містить один параметр. (Ці незвичайні правила ми роз'яснимо пізніше.)

#include <iostream.h>

class car {

int speed;

public:

car(int nSpeed = 0) {speed = nSpeed; }

car operator+(car ob2) {car temp; temp.speed = speed +

ob2.speed; return temp;}

car operator++() {speed++; return *this; }

};

void main() {

car A(30), B(100), C;

A++;

C = A + B;

}

Слід розуміти, що операторна функція може повертати об'єкти любих типів, і що ці типи залежать тільки від конкретного додатку. Проте, як правило, операторні функції повертають об'єкти класів, з якими вони працюють.

Перевантаження операторів за допомогою дружніх функцій

Оператори можна перенавантажувати за допомогою дружніх функцій, які не являються членами класу. Це означає, що дружні функції не отримують неявно покажчик this. Отже, перевантажена операторна функція отримує параметри явно. Таким чином, при перевантаженні бінарного оператора дружня функція отримує два параметри, а при перевантаженні унарного оператора — один. Першим параметром дружньої функції, що перенавантажує бінарной оператор, є його лівий операнд, а другим — правий операнд.

Наступна програма демонструє перевантаження унарного та бінарного операторів за допомогою дружніх функцій.

 

#include <iostream.h>

class car {

int speed;

public:

car(int nSpeed=0) { speed = nSpeed; }

friend car operator+(car lp, car rp);

friend car operator--(car &ob);

};

car operator+(car lp, car rp) {

car temp;

temp.speed = lp.speed + rp.speed;

return temp;

}

car operator--(car &ob) {

ob.speed--;

return ob;

}

Якщо дружні функції застосовуються для перевантаження операторів інкременту та декременту, їх операнди слід передавати за допомогою посилань. Це необхідно тому, що дружня функція не отримує покажчика this. Оператор "++", наприклад, повинен модифікувати свій операнд. Якщо перенавантажувати цей оператор за допомогою дружньої функції, як завжди, то операнд буде передаватися по значенню. Це означає, що дружня функція не зможе змінити цей параметр. Проте цю проблему можна вирішити, якщо передати операнд дружній функції за допомогою посилання. В цьому випадку всі зміни усередині функції будуть відбиватися на її фактичному параметрі.


 

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

36381. Учет персонала 29.58 KB
  Учет персонала. Взаимосвязи подсистемы Учет персонала : Из подсистемы АНАЛИЗ и УПРАВЛЕНИЕ приказы нормативы и запросы на получение информации. Информация из бухгалтерии о расходах на содержание персонала отчеты по начислениям з платы и прочие денежные выплаты. Различные отчеты и сводки для подсистемы АНАЛИЗ и УПРАВЛЕНИЕ об использовании персонала численность и качественный состав работников данные для статистики расходы на содержание персонала и т.
36382. Экстремальные регуляторы 51.93 KB
  Задача поиска экстремума разбивается на две части 1 определение отклонений от точки экстремума изучение объекта 2 организация движения к точке экстремума. ЭР с запоминанием экстремума: ЭР вкл в себя ЗУ – зап. В резте устанавливается автоколебательный режим работы регра около точки экстремума. Если Х0 сигнум – реле не меняет направление вращения ИМ если Х0 то производится реверс ИМ изменяется направление поиска экстремума.
36383. Дайте классификацию и поясните сущность интегральных критериев качества 35.68 KB
  Наибольшее распространение получили три интегральных критерия: А линейный Б квадратичный В квадратичная оценка отклонения от эталона А Линейный критерий качества 6 6 где отклонение переходного процесса от устойчивого значения; Уmt – функция веса ε1tmemtedttm Возможности критерия 7: 1У0t=t0=1 7 Критерий J10 7 – площадь под кривой переходного процесса с учетом знака рис. 2 Критерий J10 7 пригоден только для анализа апериодических процессов. В этом случае J10=min...
36384. Моделирование на ЭВМ типовых звеньев САУ 59.29 KB
  Моделирование на ЭВМ типовых звеньев САУ В состав структурных схем большинства систем автоматического управления САУ входит достаточно ограниченный набор типовых звеньев. В основу процедуры моделирования многих типовых звеньев положен метод РунгеКутта. Апериодическое звено первого порядка Реальное дифференцирующее звено Пропорциональноинтегральное звено Структурные схемы некоторых типовых звеньев. При моделировании более сложных звеньев таких как апериодическое пропорциональноинтегральное дифференциальное и т.
36385. Принцип действия термопары и термометра сопротивления 37.39 KB
  Термопара – два разнородных с различной концентрацией свободных электронов металлических проводника – термоэлектроды соединенных пайкой или сваркой на измерительном рабочем конце подвергаемом воздействию измеряемой температуры и разомкнутых на контрольном свободном конце находящемся под воздействием известной температуры и подключаемом к измерительному прибору. Принцип действия термопреобразователей сопротивления или резистивных детекторов температуры основан на способности металлов или полупроводниковых материалов изменять...
36386. Техническое обеспечение САПР 12.99 KB
  Выделяют автоматизированные рабочие места АРМ трех классов: микро АРМ для решения простых конструкторских и технологических задач в автономном режиме в составе средств двухуровневой САПР. Средние АРМ помимо задач выполняемых микро АРМ посредством графического процессора позволяют представлять объект проектирования в двух и трехмерном виде имеют пакеты прикладных программ инвариантные к различным видам объекта проектирования. Супер АРМ способны решать весь комплекс задач САПР в масштабе предприятия. Все вычислительные комплексы САПР в том...
36387. Универсальные CADCAMCAE-системы 12.71 KB
  Универсальные CDCMCEсистемы. Системы проектирования в масштабах предприятия за рубежом принято определять как CD CM CE – системы функции автоматизированного проектирования распределяются в них следующим образом: модули CD Computer ided Design – для геометрического моделирования и машинной графики модули подсистемы CM Computer ided Mnufcturing – для технологической подготовки производства а модули CE Computer ided Engineering – для инженерных расчетов и анализа с целью поверки проектных решений. Все универсальные CD CM CE –...
36388. Электрические принципиальные схемы систем и средств автоматизации. Назначение и правила выполнения 24.29 KB
  Электрические принципиальные схемы систем и средств автоматизации. Принципиальные электрические схемы определяют полный состав приборов аппаратов и устройств а также связей между ними действие которых обеспечивает решение задач управления регулирования защит измерения и сигнализации. Эти схемы служат для изучения принципа действия системы они необходимы при производстве наладочных работ и в эксплуатации. Схемы выполняются применительно к определенным самостоятельным элементам установкам или участкам автоматизированной системы...
36389. тема или АИС это совокупность различных программноаппаратных средств которые предназначены для автомат. 28.78 KB
  Учет снабжения Финансовый учет Информация опоставке информация об оплате Бухгалтерский учет Требования на отпускинформация о поступлении груза цены на ресурсы данные о качестве Учет производства и контроль качества Учет вспомогательно прва Управление и анализ Отчетность по снабжению указания и планы Подсистема Учет снабжения предназначена для ввода и обработки информации по обеспечению оборудованием и материалами предоставляемой отделами и службами предприятия. Данная подсистема осуществляет интенсивный обмен информацией с подсистемой...