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


 

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

43417. Безопасность жизнедеятельности. Методические указания 73 KB
  Первый слайд должен отражать содержание титульного листа (кроме отметки о допуске к защите). На остальных слайдах, в зависимости от выбранной темы, рекомендуется отразить результаты анализа причин рассматриваемых ЧС, этапы их развития, статистические данные или место рассматриваемой ЧС в общей классификации, либо этапы анализа особенностей рассматриваемого объекта экономики с точки зрения его устойчивости к ЧС и его результаты.
43418. Бухгалтерский учет налога на добавленную стоимость 143.5 KB
  Общий порядок уплаты налога на добавленную стоимость Учет налога на добавленную стоимость Список использованной литературы Введение Налог на добавленную стоимость НДС занимает важное место в системе налогов России. Расчеты организации с бюджетом по налогу на добавленную стоимость осуществляются в соответствии с главой 21 части второй Налогового кодекса РФ. Налог на добавленную стоимость косвенный налог плательщиками которого являются организации и индивидуальные предприниматели.
43419. ОРГАНИЗАЦИЯ УЧЕТА РАСЧЕТОВ С БЮДЖЕТОМ, ВНЕБЮДЖЕТНЫМИ ФОНДАМИ И ПРОЧИМИ ОРГАНИЗАЦИЯМИ И ЛИЧНОСТЯМИ 162.5 KB
  Для учетного отражения отношений организации по расчетам с бюджетом используют синтетический счет 68 Расчеты по налогам и сборам. Расчеты по налогам и сборам 68 при производственном использовании; учета источников покрытия затрат на непроизводственные нужды при использовании на непроизводственные нужды; Прочие доходы и расходы 91 при продаже этого имущества. По счету 68 расчеты по налогам и сборам составим самолет на основе главной книги по счету 68. Аналогично составим самолет по счету 69 расчеты по социальному...
43420. УСИЛИТЕЛЬ ЗВУКОВОЙ ЧАСТОТЫ 947.5 KB
  Выбор и обоснование структурной схемы усилителя. Расчёт схемы электрической принципиальной усилителя мощности. Расчет темброблока и предварительного усилителя . К недостаткам бестрансформаторного усилителя следует отнести необходимость термостабилизации транзисторов оконечного каскада.
43421. Сестринский процесс при туберкулезе 502.5 KB
  В настоящее время в мире ежегодно регистрируется только бациллярного туберкулеза до 10 млн. новых случаев туберкулеза и 70 млн. А быстрое распространение лекарственно-устойчивых штаммов возбудителя туберкулеза нарастание полирезистентности грозит превратить туберкулез в неизлечимое заболевание. Программа современной контролируемой химиотерапии укороченной длительности имеет первостепенное значение для прекращения рассеивания туберкулезной инфекции и снижения смертности от туберкулеза.
43422. Расчет характеристик карьерного самосвала БелАЗ-7548 798 KB
  Золотники 6 и 13 смещаются в крайнее правое по рисунку положение и поток рабочей жидкости от насосов 2 3 и 4 через гидрораспределитель 6 и золотник 13 подается в поршневые полости гидроцилиндров Дроссель в гидролинии опускания обеспечивает давление рабочей жидкости в штоковых полостях гидроцилиндров 2530МПа необходимое для торможения платформы в конце подъема. При этом уменьшается необходимое для подъема платформы усилие и соответственно снижается давление рабочей жидкости в напорной гидролинии подъема. Техническое обслуживание...
43424. Изучение вопросов организации налогового учёта в РФ, его целей и задач 393.5 KB
  Введение в действие Налогового кодекса который формировался на основе общепринятых международных стандартов с учётом особенностей российской экономики ещё сильнее поставил противоречия в организации бухгалтерского учёта в нашей стране. Перед предприятиями встала необходимость ведение дополнительного налогового учёта в целях налогообложения. Цель курсовой работы изучение вопросов организации налогового учёта в РФ его целей и задач.
43425. Рентабельность производства продукции, пути ее роста 293.5 KB
  Теоретические аспекты темы Сущность и понятие рентабельности Характеристика показателей рентабельности производства Анализ динамики показателей рентабельности Краткая природно климатическая характеристика предприятия Анализ рентабельности производства на примере предприятия ЗАО Куликовское Калачинского района.