Будь умным!


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

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

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

Бесплатно
Узнать стоимость работы
Рассчитаем за 1 минуту, онлайн

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

В языке С++ имеется возможность определять функции, имена которых совпадают с именами встроенных операторов: +, -, *, / и.т.д. Такие функции определяются с ключевым словом 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. Экотехпром В рамках реализации PRкампании для компании Экотехпром было принято решение осуществить
3. Estern Itlin French nd others
4. Максимум представляют Российский межрегиональный турнир
5. Методика анализа лирического произведения на примере творчества АА Ахматовой
6. медиа в рыночных демократиях сталкивались с падением интереса аудитории к политике
7. История судебной экспертизы
8. Концепция проекта в проектном анализе
9. Технология производства мороженого на предприятии Петрохолод
10. Лабораторная работа 16 Тема- Построение трехмерной модели зубчатого колеса одноступенчатого цилиндрическ
11. тема координат связанная с телом отсчёта и прибор для измерения времени часы
12. Тема Банковская система Фамилия Самсонова Имя
13. на тему- Понятие и сущность предпринимательской фирмы СТУДЕНТ
14.  Роль и значение сущность функции розничной торговли
15. Активный Организатор всегда рядом с ребятами и старается заинтересовать каждого в какомто деле или игр
16. Сумароков АП
17. Жизнь и деятельность семьи Бернулли
18. Контрольная работа по психологии Выполнил- Студент И
19. ТЕМА РЕФЕРАТА Ниже приведены тематические направления по которым Вы можете писать рефераты
20. Формирование сети физкультурно-спортивных сооружений с учетом атмосферной экологии.html