Все вариации задания на 16 баллов, не забудьте проявить креативность и хотя бы названия переменных поменять) Комментарии для лучшего понимания написанного присутствуют.
#include <iostream> using namespace std; class Drob { private: // Поля класса num - числитель, denum - знаменатель // Спрятаны private спецификатором доступа, то есть инкапсулированы внутри класса int num; int denum; public: // Конструктор по умолчанию Drob() { num = 0; denum = 1; } // Параметрический конструктор с данными по умолчанию, если те не будут введены // Можно сказать это уже объединение двух конструкторов Drob(int num = 0, int denum = 1) { // Присваиваю значиная полям класса через ключевое слово this this->num = num; // Проверяю на корректность данных if (denum == 0) throw "Devision by zero!"; else this->denum = denum; //Сокращаю дробь int nod = Nod(num, denum); this->num /= nod; this->denum /= nod; } // Конструктор копирования Drob(const Drob& other) { this->num = other.num; this->denum = other.denum; } // Конструктор перемещения Drob(Drob&& other) noexcept { this->num = other.num; this->denum = other.denum; } // Функция нахождения наибольшего общего делителя для сокращения дроби int Nod(int a, int b) { if (b == 0) return a; else return Nod(b,a % b); } // Функция вывода на экран дроби void Print() { if (num * denum < 0) cout << "-" << abs(num) << "/" << abs(denum) << " "; else cout << abs(num) << "/" << abs(denum) << " "; } // Функция ввода с экрана void Scan() { int num, denum; cout << "Введите числитель дроби: "; cin >> num; cout << "Введите знаменатель дроби: "; cin >> denum; this->num = Drob(num, denum).num; this->denum = Drob(num, denum).denum; } // Сложение дробей Drob Add(Drob other) { int num = this->num * other.denum + this->denum * other.num; int denum = this->denum * other.denum; return Drob(num, denum); } // Вычитание дробей Drob Diff(Drob other) { int num = this->num * other.denum - this->denum * other.num; int denum = this->denum * other.denum; return Drob(num, denum); } // Умножение дробей Drob Mul(Drob other) { int num = this->num * other.num; int denum = this->denum * other.denum; return Drob(num, denum); } // Деление дробей Drob Div(Drob other) { int num = this->num * other.denum; int denum = this->denum * other.num; return Drob(num, denum); } // Сложение с числом Drob Add(int other) { int num = this->num + this->denum * other; int denum = this->denum; return Drob(num, denum); } // Вычитание числа Drob Diff(int other) { int num = this->num - this->denum * other; int denum = this->denum; return Drob(num, denum); } // Умножение на число Drob Mul(int other) { int num = this->num * other; int denum = this->denum; return Drob(num, denum); } // Деление на число Drob Div(int other) { int num = this->num; int denum = this->denum * other; return Drob(num, denum); } // Сравнение на равенство bool isEqual(Drob other) { return this->num == other.num && this->denum == other.denum; } // Сравнение на равенство bool isNotEqual(Drob other) { return this->num != other.num || this->denum != other.denum; } // Сравнение на больше или равно bool isMoreorEqual(Drob other) { return double(this->num)/this->denum>= double(other.num) / other.denum; } // Сравнение на меньше или равно bool isMoreorEqual(Drob other) { return double(this->num) / this->denum <= double(other.num) / other.denum; } };