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


 

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

81391. Социальная работа как социальный институт. Основные функции социальной работы 35.7 KB
  Социальную работу можно отнести к социальному институту т. ролей и статусов Возникла исторически В качестве функций социальной работы можно назвать: социальную диагностику это процесс исследования социального объекта явления путем распознавания и изучения причинноследственных связей отношений характеризующих его состояние и тенденции развития. социальную профилактику деятельность по предупреждению социальной проблемы социального отклонения или удержанию их на социально терпимом уровне посредством устранения или нейтрализации...
81392. Социальная помощь в России в доинституциональный период социальной работы 38.2 KB
  Что касается феодальной Древней Руси то законодательная база социальной защиты в этом обществе развивалась довольно медленно. При чем в эту эпоху уже имеет место дифференцированный адресный подход к клиентам социальной помощи: прокаженные и престарелые должны были быть устроены в богадельни а здравые питаться по дворам. и последующие реформы обозначили новые подходы в социальной политике самодержавного государства.
81393. Основные этапы институциализации социальной работы 37.22 KB
  На начальном этапе институты социальной работы решали лишь конкретные задачи текущего момента. Затем появляется необходимость передачи накопленного опыта решения конкретных задач и образуется потребность в оформлении первичных теоретических представлений на сложившуюся практику социальной работы. Таким образом сформировалось специфическое образовательное пространство и были заложены основы теоретических обобщений практики социальной работы.
81394. Принципы и методы социальной работы 34.07 KB
  Принципы и методы социальной работы как социального института можно обозначить как сложившиеся правовые и моральные обычаи традиции нормы взаимоотношений между объектами и субъектами социальной работы получившими отражение законодательное и практическое в управлении этим институтом общества. К числу принципов социальной работы относят: гуманизм альтруизма эмпатия сочувствие доверие дифференцированный подход посредничество соблюдение конфиденциальности в работе адресность Система методов социальной работы сложна и многообразна....
81395. Теоретико-категориальный аппарат социальной работы. Понятия «социальная помощь», «социальная защита», «социальная реабилитация», «социальные гарантии» 33.49 KB
  Теоретикокатегориальный аппарат социальной работы. Под социальной защитой можно понимать систему мероприятий осуществляемых обществом и его различными структурами по обеспечению гарантированных минимально достаточных условий жизни поддержанию жизнеобеспечения и деятельного существования человека. Социальная помощь система социальных мер в виде содействия поддержки и услуг оказываемых отдельным лицам или группам населения социальной службой для преодоления или смягчения жизненных трудностей поддержания их социального статуса и...
81396. Антидискриминационная направленность социальной работы. Эйджизм, сексизм и инвалидизм в современном обществе 39.68 KB
  С точки зрения феминистской теории сексизм это проявление патриархата то есть такого устройства общества при котором мужчины как социальная группа обладают властью над женщинами как социальной группой. Для оправдания идеологии сексизма как правило используются эссенциалистские утверждения объясняющие социальное неравенство мужчин и женщин их природными различиями. Исторически женщины были а в некоторых странах остаются ущемлены в гражданских правах по сравнению с мужчинами например лишены избирательных прав. Она может выражаться в...
81397. Явление стигматизации в современном обществе. Виды стигматизации. Приведите примеры проявления 39.99 KB
  В отличие от слова клеймение слово стигматизация может обозначать навешивания социальных ярлыков. В этом смысле стигматизация ассоциация какоголибо качества как правило отрицательного с конкретным человеком или группой людей хотя эта связь отсутствует или не доказана. Стигматизация является составной частью многих стереотипов. Виды социальной стигматизации можно классифицировать следующим образом: Культурная стигматизация социальные ярлыки укоренившиеся в культуре государства либо мировой культуре чукчи недогадливы.
81398. Виктимизация и криминализация как социальное явление 37.5 KB
  Виктимизация это процесс превращения человека в жертву преступления и результат этого процесса как в единичном так и в массовом порядке. Виктимизация Обстоятельства тормозящие нормальное развитие личности человека: Общество и его культура; Низкий уровень жизни; Безработица обычаи и традиции народа; Особенности семейного воспитания; Плохие экологические условия на месте проживания; Слабая социальная поддержка государства Все эти факторы могут превращать в жертву социализации. Виктимизация процесс превращения человека в...
81399. Пенсионеры как объект социальной работы и социологического анализа 38.97 KB
  Роуз согласно которой культура становится стержнем объединяющим людей пожилого возраста создает особую близость между ними и в то же время обосабливает их от других возрастных когорт. Эта теория предполагает возрастную дифференциацию наряду с социальной разделяя людей на группы по их образу жизни и материальному положению. Терапевтические модели образующие фундамент практической работы с пожилыми людьми должны использовать 3 принципа: Изучение индивида в его социальной среде Понимание психосоциологического становления и развития...