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

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

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

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

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

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

от 25%

Подписываем

договор

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

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

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

В языке С++ имеется возможность определять функции, имена которых совпадают с именами встроенных операторов: +, -, *, / и.т.д. Такие функции определяются с ключевым словом 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. А Заполнить данные исследуемого выбрать вид теста Tb или Click
3. Основные ноты мещанства уродливо развитое чувство собственности всегда напряженное желание покоя внутри
4. 1732 РІШЕННЯ ІМЕНЕМ УКРАЇНИ 20
5. тема Экономика
6. Освободиться от старого того что тяготит или стоит на пути Напишите по 10 писем значимым людям оказавш
7. Постперепост далее ~ Конкурс I
8. Развитие индивидуальности ребёнка
9. Соотношение экономики и права
10. Шкала магнитуд. Человеческие жертвы и повреждения возникающие в результате землетрясений.html