/
plato
/
overloading
Обзор
Документация
Войти
/
plato
/
overloading
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
ex2/main.cpp
185 строк
5 KB
Evanivan
init commit
13 окт 2025, 01:23
13 окт 2025, 01:23
d414646
Код
Авторство
О чём код?
#include <iostream> #include <string> #include <exception> class Fraction { private: int numerator_; int denominator_; void fractionReduce() { int num = numerator_; int denom = denominator_; while (denom != 0) { int tmp = denom; denom = num % denom; num = tmp; } numerator_ /= num; denominator_ /= num; if (denominator_ < 0) { numerator_ = -numerator_; denominator_ = -denominator_; } } public: Fraction(int numerator, int denominator) : numerator_(numerator), denominator_(denominator) { if (denominator == 0) throw std::invalid_argument("Denominator cannot be zero"); fractionReduce(); } bool operator==(Fraction other) { return numerator_ * other.denominator_ == denominator_ * other.numerator_; } bool operator!=(Fraction other) { return !(*this == other); } bool operator<(Fraction other) { return (this->numerator_ * other.denominator_) < (this->denominator_ * other.numerator_); } bool operator>(Fraction other) { return (other < *this); } bool operator<=(Fraction other) { return !(other < *this); } bool operator>=(Fraction other) { return !(other > *this); } Fraction operator+(const Fraction& other) { int numerator_calc = (numerator_ * other.denominator_) + (denominator_ * other.numerator_); int denomenator_calc = denominator_ * other.denominator_; return Fraction(numerator_calc, denomenator_calc); } Fraction operator-(const Fraction& other) { int numerator_calc = (numerator_ * other.denominator_) - (denominator_ * other.numerator_); int denomenator_calc = denominator_ * other.denominator_; return Fraction(numerator_calc, denomenator_calc); } Fraction operator*(const Fraction& other) { int numerator_calc = numerator_ * other.numerator_; int denomenator_calc = denominator_ * other.denominator_; return Fraction(numerator_calc, denomenator_calc); } Fraction operator/(const Fraction& other) { int numerator_calc = numerator_ * other.denominator_; int denomenator_calc = denominator_ * other.numerator_; return Fraction(numerator_calc, denomenator_calc); } Fraction& operator-() { numerator_ *= -1; fractionReduce(); return *this; } Fraction& operator++() { numerator_ += denominator_; fractionReduce(); return *this; } Fraction operator++(int) { Fraction tmp = *this; numerator_ += denominator_; fractionReduce(); return tmp; } Fraction& operator--() { numerator_ -= denominator_; fractionReduce(); return *this; } Fraction operator--(int) { Fraction tmp = *this; numerator_ -= denominator_; fractionReduce(); return tmp; } std::string printFraction() { return std::string{std::to_string(numerator_) + "/" + std::to_string(denominator_)}; } }; int main() { int num1, denom1, num2, denom2; std::cout << "Введите числитель дроби 1: "; std::cin >> num1; std::cout << "Введите знаменатель дроби 1: "; std::cin >> denom1; std::cout << "Введите числитель дроби 2: "; std::cin >> num2; std::cout << "Введите знаменатель дроби 2: "; std::cin >> denom2; Fraction f1(num1, denom1); Fraction f2(num2, denom2); auto res_ad = f1 + f2; std::cout << f1.printFraction() << " + " << f2.printFraction() << " = " << res_ad.printFraction() << std::endl; auto res_substr = f1 - f2; std::cout << f1.printFraction() << " - " << f2.printFraction() << " = " << res_substr.printFraction() << std::endl; auto res_multi = f1 * f2; std::cout << f1.printFraction() << " * " << f2.printFraction() << " = " << res_multi.printFraction() << std::endl; auto res_div = f1 / f2; std::cout << f1.printFraction() << " / " << f2.printFraction() << " = " << res_div.printFraction() << std::endl; auto res_ad1 = (f1) / f2; std::cout << f1.printFraction() << " / " << f2.printFraction() << " = " << res_ad1.printFraction() << std::endl; std::cout << "++" << f1.printFraction() << " * " << f2.printFraction() << " = "; auto result1 = (++f1) * f2; std::cout << result1.printFraction() << std::endl; std::cout << "Значение дроби 1 = " << f1.printFraction() << std::endl; std::cout << f1.printFraction() << "-- * " << f2.printFraction() << " = "; auto result2 = (f1--) * f2; std::cout << result2.printFraction() << std::endl; std::cout << "Значение дроби 1 = " << f1.printFraction() << std::endl; return 0; } /* сложение; вычитание; умножение; деление; унарный минус; инкремент постфиксный и префиксный; декремент постфиксный и префиксный. */