Перейти к содержимому

ООП ЛБ1-16б

Все вариации задания на 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;
	}
};