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

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

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

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

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

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

от 25%

Подписываем

договор

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

Скидка 25% при заказе до 26.12.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. 2014 учебный год График проведения практических занятий по дисциплине Фармакогнозия для студентов 5
2. 2014 учебный год 10 11 классЗадания практического тура Биохимия и молекулярная биологиЯ 40 баллов Врем
3. ТОМСКИЙ ПОЛИТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ УТВЕРЖДАЮ Декан АВТФ С
4. Тема Характеристика столової білизни
5. 25 мая 2013 г. Субъект персональных данных ИВАНОВ ОЛЕГ ИВАНОВИЧ свидетельство о рождении- серия I
6. Теоретическое введение 1
7. Аделайн С.Е.К.Р
8. БАШКИРСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ДНЕВНИК ПРАКТИКИ вид пр
9. Реферат- Аналіз ділового партнерства- зміст, проблеми, перспективи.html
10. 40 25 ngle of ttck in scending order
11. дистального и вестибулярного перемещения отдельных и групп зубов; накусочные площадки; окклюзионные наклад
12. Топик- I heard a Fly buzz
13. тематическая основа теории волн
14. Первые Европейцы которые достигнут Северной Америки были Исландскими Викингами во главе с Леифом Эрайкс
15. О налогообложении прибыли предприятий от 22
16. варианте что написан чуть выше читатель без труда узнает в нем коллаж составленный из заглавий двух пожалу
17. Контрольная работа- Использование положений уголовно-исполнительного права при отбывании наказания осужденными
18. I. Сутність фінансового аудиту Частина II.
19. Основы работы в Windows 95(98) изучение интерфейсных элементов и работа с ними
20. яке відхилення від регламенту може привести до зниження якості продукції що випускається і в остаточному п