Будь умным!


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

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

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


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

В языке С++ имеется возможность определять функции, имена которых совпадают с именами встроенных операторов: +, -, *, / и.т.д. Такие функции определяются с ключевым словом 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. на тему- УЧРЕДИТЕЛЬНЫЕ ДОКУМЕНТЫ ООО
4. Философия XX века
5. Реферат- Атмосферный воздух- его загрязнение и охрана
6. Отчет по лабораторной работе 5 по курсу Разработка программных систем Выполнила- Митина Е
7. Тема- Витамины и их влияние на здоровье людей Выполнил- студентка 1 курса Группы- БД 4
8. Типологія соціальнотрудової мобільності населення
9. партизм как специфический вид социального партнерства
10. планирование и регламент на междунар
11. Лесопользование в бюджетном учете
12. тема электрооборудования транспортного средства включает элементы электроники
13. тематики физики
14. Наследование авторских прав
15. Электрон в слое
16. Варіант1 1.Предмет мета та завдання ЗЕД Предметом навчальної дисципліни
17. Наймання тимчасове користування будівлями земельною ділянкою обладнанням виробничими площами машинами
18. . Определение вирусов как особых форм организации живого
19. Реферат- Лица, освобожденные от применения ККТ
20. ПОДГОНКА НОСИЛОЧНОЙ САНИТАРНОЙ ЛЯМКИ ПО РОСТУ КОЛЬЦОМ И ВОСЬМЕРКОЙ.html