Определить класс «Дробь» в виде пары. Реализовать методы для сложения, вычитания, умножения и деления дробей. Перегрузить операции сложения, вычитания, умножения, деления, присваивания, отношения для данного класса.
Как именно записывается перегрузка для сложения.
Другие языки программирования и технологии
Перегрузка сложения в С++
В таком случае полезно указывать уровень доступа к требуемым полям класса!
#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;
}
}
#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;
}
}
Object operator+(Object obj);
Похожие вопросы
- C++ Помогите, не работает перегрузка
- Подскажите про перегрузку/переопределение C#
- Составьте программу сложения на ассемблере.
- С++ Арифметические действия над числами пронумерованы следующим образом : 1-сложение, 2-вычитание, 3-умножение, 4-дел...
- разбивал диск С на 2 активных прогой акроникс директ диск-при перегрузке не загружается комп черный экран
- Перегрузка оператора в C++
- объясните что такое перегрузка операторов
- Перегрузка операций методами класса в С++. Расскажите, пожалуйста, кратко и доходчиво на каком-нибудь примере.
- C++. Перегрузка
- Зачем нужна перегрузка операторов? Можете написать код для большей усваимости C#