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


 

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

31201. Система наблюдений с параллельной геометрией ЛПП и ЛПВ 30 KB
  Система наблюдений по технологии ШП реализуемая на суше с применением линейных станций ограниченной канальности представляет собой совокупность из профилей возбуждения расположенных параллельно и симметрично одному профилю приема рис. В результате суммарная кратность перекрытий на профиле наблюдений Ро1ат г= Ро1а^ РоМу будет равна 32. Линии проекций общих глубинных точек на поверхность наблюдений параллельны линиям возбуждения.
31202. Сейсмические форматы и запись на магнитную ленту 30 KB
  По рекомендации SEG Общества геофизиковразведчиков в сейсморазведочных станциях в качестве стандартных для 9дорожечных магнитофонов при записи на ленту приняты следующие основные мультиплексные форматы: SEGB с длиной сейсмического слова 25 байта; SEGD с длиной сейсмического слова 4 байта. В качестве демультиплексных форматов в сейсморазведке по рекомендации SEG в настоящее время наиболее широко используются следующие: SEGD801520битный формат с длиной сейсмического слова в 25 байта; SEGD804832битный формат с длиной...
31203. Сейсморазведочная аппаратура первого поколения 30 KB
  Сейсморазведочная станция СС30 6056 конструкции 1956 года содержала уже 60 сейсмических каналов группы по 15 каналов с раздельными фильтрами НЧ и ВЧ. Она была смонтирована в виде набора блоков два блока усилителей по 12 каналов осциллограф пульт управления блок питания переносная фотолаборатория соединительные кабели. Сейсморазведочная станция СС605 содержала 60 сейсмических каналов и была первой отечественной широкодиапазонной станцией приспособленной для регистрации колебаний в диапазоне от 15 до 350 Гц.
31204. Сейсморазведочные станции с промежуточной аналоговой записью 30 KB
  Главным средством создания воспроизводимой сейсмической записи оказалась магнитная аналоговая запись. Сейсморазведочные станции этого типа состоят из двух основных частей: блока записи и блока воспроизведения. Сейсморазведочная станция СС2461М имела 24 основных канала записи и 4 вспомогательных канала для регистрации марок времени отметки моментов взрыва и вертикального времени. Использовался прямой способ записи на ленту с высокочастотным подмагничиванием.
31205. Сейсморазведочные станции с цифровой магнитной регистрацией 30 KB
  Первой отечественной цифровой сейсморазведочной станцией была станция ССЦ1 созданная в 1966 г. Сейсморазведочная станция ССЦ2 была первой отечественной цифровой сейсморазведочной станцией которая достаточно успешно и сравнительно долго 1970 1976 гг. Сейсморазведочная станция ССЦ3 была разработана институтом ВНИИГеофизика Москва при участии фирмы SERSEL Франция в 1972 году. С 1976 года выпускался модернизированный вариант станции под маркой ССЦ4.
31206. Сети наблюдений 36.5 KB
  Сейсморазведочные работы 2D проводятся для изучения строения земной коры по отдельным профилям или сети профилей с целью решения задач на региональном поисковом детальном а иногда даже на детализационном этапах геологоразведочного процесса. Цели и задачи конкретной сейсмической съемки определяются этапом геологоразведочных работ на данной территории. Как известно в России принято выделять три этапа геологоразведочных работ региональный поисковый и детальный. Исследования по отдельным протяженным профилям на региональном этапе работ...
31207. Системы записи и предварительной обработки сейсмической информации 33 KB
  С точки зрения технологии применения сейсмической разведки в главном направлении в области поисков и разведки углеводородов всю выпускаемую аппаратуру можно условно разделить на два класса: аппаратура и оборудование для исследований по отдельным профилям линиям с использованием относительно ограниченного числа каналов. В ее названии присутствует индекс Л или L ; аппаратура и оборудование для исследований на площадях достаточно больших размерив с одновременной регистрацией волнового поля большим числом каналов. Для сейсморазведочных...
31208. Системы наблюдений со сложными но форме линиями приема или возбуждения 28.5 KB
  Система наблюдений при правильном планировании может обладать хорошим распределением удалений и азимутов. Предложено и ряд систем наблюдений регулярного типа в которых используются сложные по форме линии приема ЛПП или возбуждения ЛПВ. Среди систем наблюдений такого типа следует прежде всего указать на системы типа звезда и радиальная .
31209. Суда для сейсморазведочных работ 32.5 KB
  иметь специальное радионавигационное оборудование для уверенного ведения судна по запроектированной системе сейсмических профилей; обладать достаточной автономностью плавания 30 60 суток. м в наиболее комфортной части судна. Процесс смотки и размотки сейсмических кос требует установки на корме судна в полузакрытом помещении специальных барабанов с электроприводом и емкостью размещаемых кос объемом до 10 15 м3. Кроме этого весьма важно чтобы шумы самого судна шумы двигателя были бы также достаточно малыми.