Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

и.т.д. Такие функции определяются с ключевым словом opertor

Работа добавлена на сайт samzan.net:

Поможем написать учебную работу

Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 9.11.2024

Перегрузка операторов.

В языке С++ имеется возможность определять функции, имена которых совпадают с именами встроенных операторов: +, -, *, / и.т.д. Такие функции определяются с ключевым словом operator. Они называются функциями – операторами. При вызове функций достаточно указывать только знак оператора, например, (+). Как правило, в функциях – операторах выполняются действия, которые отражаются знаком используемого оператора, что делает программы более наглядными и понятными.

Правила перегрузки операторов.

Перегружены могут быть любые операторы языка С++, за исключением операторов

.     .*     ::     ?:

Нельзя менять синтаксис операторов, например, нельзя определить оператор перемножения сразу трех дробей, так как встроенный оператор умножения – бинарный:

Fraction operator*(Fraction a, Fraction b, Fraction c);  //Ошибка, 3 сомножителя

Для перегруженных операторов сохраняются приоритеты и порядок выполнения.

Функция – оператор должна быть или членом класса, или иметь аргумент типа класса. Нельзя определить функцию – оператор, имеющую только аргументы встроенных типов, например, нельзя определить функцию int и double:

double operator+(int, double); //Ошибка, аргументы 

                                                                        //только встроенных функций

// Fraction.h

#ifndef FRACTIONH

#define FRACTIONH

#include<iostream.h>

class Fraction{

 int num;  //числитель

 int denom;  //знаменатель

public:

 Fraction(int n=1,int m=1){num=n; denom=m;}  //конструктор

 //методы доступа к закрытым членам

 int numerator() { return num;}

 int denominator() { return denom;}

 Fraction operator+(Fraction a);  //метод сложения

 Fraction operator-()  //изменение знака дроби

 { return Fraction(-num,denom);}

//функция-друг вычитания дробей

 friend Fraction operator-(Fraction a,Fraction b);

 void print()  //вывод дроби

 {cout<<num<<'/'<<denom;}

};

//независимая функция для умножения дробей

Fraction operator*(Fraction a,Fraction b);

#endif

//файл Fraction.cpp

#include "Fraction.h"

Fraction Fraction::operator+(Fraction b)  //сложение дробей

{

 int cd=denom*b.denom;  //общий знаменатель

 int ns=num*b.denom+b.num*denom;  //числитель суммы

 Fraction sum(ns,cd);  //sum-сумма дробей

 return sum;

}

Fraction operator-(Fraction a,Fraction b)  //вычитание дробей

{

 int cd=a.denom*b.denom;  //лбщий знаменатель

 int ns=a.num*b.denom-b.num*a.denom;  // числитель разности

 Fraction subtr(ns,cd);  //subtr-разность дробей

 return subtr;

}

Fraction operator*(Fraction a,Fraction b)

{

 int np=a.numerator()*b.numerator();  //числитель произведения

 int dp=a.denominator()*b.denominator();  //знаменатель произведения

 return Fraction(np,dp);

}

//файл FractOpr.cpp

#include "Fraction.H"

#include<conio.h>

int main()

{

 Fraction f12(1,2),f13(1,3),fs,fd,fp,fm;

 cout<<"f12= "; f12.print(); cout<<endl;

 cout<<"f13= "; f13.print(); cout<<endl;

 fs=f12.operator+(f13);  //явный вызов функции-оператора

 cout<<"f1s= "; fs.print(); cout<<endl;

 fd=f12-f13;  //неявный вызов

 cout<<"fd= "; fd.print(); cout<<endl;

 fp=f12*f13;

 cout<<"fp= "; fp.print(); cout<<endl;

 fm=-f12;

 cout<<"fm= "; fm.print(); cout<<endl;

}




1. Реферат- Конспект лекций по политэкономии
2. Курсовая работа- Внутрифирменное управление
3. ВАРИАНТ П5 УКАЖИТЕ ТОЛЬКО ОДИН ПРАВИЛЬНЫЙ ОТВЕТ 001
4. Введение Роль статистики при переходе к рыночным отношениям как известно возрастает
5. Политика мирного сосуществования и конфликты холодной войны
6. Метафизика Вещи состоят из материи и формы из кот
7. Понятие rdquo;здоровьеldquo;
8. а а также взаимовлияние между субъектами хозяйственной деятельности которое проявляется в ценах на товары
9. кровяных ядов При ингаляции окиси углерода происходит обратимое но весьма стойкое соединение его с гемог
10. на тему- ЯПОНИЯ
11. АЛЬМЕДА сопредседатель Воронежской областной ассоциации медицинских страховых организаций Леонид Петров
12. 3rdquo; организация производящая комплекс проектных строительномонтажных и пусконаладочных работ в област
13. Сучасні напрямки розвитку асортименту та споживних властивостей кухонних комбайнів
14. Реферат- Ефективність модифікованого способу лікування розладів акомодації у дітей з астигматизмом
15. Сопротивление материалов а Внутренние усилия в стержнях метод мысленных сечений б Понятие напряжений
16. Безопасность Linux
17.  Понятие и виды инновационного проекта и программы4 2
18. і Розкрийте поняття ldquo;розумовий розвитокrdquo; ldquo;розумове вихованняrdquo;
19.  Доминирующие культуры и субкультуры 2
20. Принцип положенный в основу правописания безударных личных окончаний глаголов в настоящем и будущем време.html