Другие языки программирования и технологии

Перегрузка сложения в С++

Определить класс «Дробь» в виде пары. Реализовать методы для сложения, вычитания, умножения и деления дробей. Перегрузить операции сложения, вычитания, умножения, деления, присваивания, отношения для данного класса.

Как именно записывается перегрузка для сложения.
В таком случае полезно указывать уровень доступа к требуемым полям класса!

#include <iostream>
using namespace std;
class fraction {
public:
fraction(long long, long long);
fraction& operator=(const fraction&);
void show()const;
fraction &operator+(const fraction&);
private:
void err()const;
long long nod();
friend fraction operator+(fraction &, fraction &);
void reduce();
long long numerator;
long long denominator;
bool bad;
};
int main() {
setlocale(0, "");
fraction a(3, 4);
a.show();
fraction b(5, 6);
b.show();
b = b; // Можно! !
a = a + b;
a.show();
cin.get();
}
fraction operator+(fraction& left, fraction& rigth) {
long long numerator = left.numerator * rigth.denominator + rigth.numerator * left.denominator;
long long denominator = left.denominator * rigth.denominator;
fraction result(numerator, denominator);
return result;
}
fraction::fraction(long long _n, long long _d) : numerator(_n), denominator(_d) {
if (!denominator) bad = false;
else {
reduce();
bad = true;
}
}
fraction& fraction::operator=(const fraction& frac) {
if (&frac == this) return *this;
numerator = frac.numerator;
denominator = frac.denominator;
return *this;
}
void fraction::show()const {
if (!bad) err();
else cout << numerator << " / " << denominator << endl;
}
void fraction::err()const { cout << "\a Попытка деления на ноль! \n"; }
long long fraction::nod() {
long long a = abs(numerator);
long long b = abs(denominator);
if (!a && !b) a = 0;
else while (b) b ^= a ^= b ^= a %= b;
return a;
}
void fraction::reduce() {
long long n = nod();
if (n) {
numerator /= n;
denominator /= n;
}
if (numerator < 0 && denominator < 0) {
numerator = abs(numerator);
denominator = abs(denominator);
}
if (denominator < 0) {
denominator = abs(denominator);
numerator *= -1;
}
}
Madiyar Toibazarov
Madiyar Toibazarov
70 733
Лучший ответ
Object operator+(Object obj);