Будь умным!


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

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

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

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

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

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

от 25%

Подписываем

договор

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

Скидка 25% при заказе до 25.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. Роман АСПушкина Евгений Онегин в русской критике ХIХ века Д
3. СанктПетербургский государственный технологический университет растительных полимеров М
4. Принцип действия
5.  Соцэконом развитие Англии в кон16пп17вв
6. Эмпатия как свойство личности
7. тема экономических пpотивоpечий или философия нищеты] Р
8. Реферат по дисциплине ИСТОРИЯ ФИЗИЧЕСКОЙ КУЛЬТУРЫ Выполнил-
9. ОКТЯБРЬ 2009 годовой К О Д Ы Организация СПК ОЗП
10. . Расчётный анализ объёмнопланировочных и техникоэкономических решений
11. Wenn die Bnk m Heili gen bend nicht offen htte mnnomnn d tt die gnze Wirtschft zusmmenbre w~rde j Hildegrd stellte den Kffee uf den Fr~hst~cks tisch
12. к~ш векторы ~серімен жылжыту кезіндегі жасалатын ж~мысты~ м~лшері векторлы~ ~рісті~ дивергенциясын та
13. Анализ товарооборота
14. Бакалавр информационной безопасности
15. РЕФЕРАТ дисертації на здобуття наукового ступеня кандидата медичних наук
16. Курсовая работа- Планування міст
17. 13 ~ інфекційні хвороби А в т о р е ф е р а т дисертації на здобуття наукового ступеня кандида
18. 10 реферат дисертації на здобуття наукового ступеня кандидата технічних наук Київ
19. Введение Мировая черная металлургия за последние два десятилетия претерпела существенные изменения связа
20. Тематика рефератов- Основные достижения школы научного управления