Почему он выдает ошибку о перегруженных операторах?
Напишите дробь класса, которая определяет сложение, вычитание, умножение и
деление дробей путем перегрузки стандартных операторов для этих операций. Писать
функциональный элемент для уменьшения коэффициентов и перегрузки операторов ввода-вывода на вход и
выходные фракции
#include <iostream> class Fraction { int m_n1, m_n2, m_d1, m_d2, m_n, m_d; public: Fraction():m_n1(0), m_n2(0), m_d1(0), m_d2(0) { } Fraction(int n1, int n2, int d1, int d2):m_n1(n1), m_n2(n2), m_d1(d1), m_d2(d2) { fractionsAddition(n1, n2, d1, d2); reduce(m_n, m_d); } int gcd(int n, int d); int lcm(int d1, int d2); void fractionsAddition(int n1, int n2, int d1, int d2); void reduce(int n, int d); friend std::ostream &operator<<(std::ostream &out, const Fraction &f); friend std::istream &operator>>(std::istream &in, const Fraction &f); }; int Fraction::gcd(int n, int d) { if(d==0) { return n; } return gcd(d, n%d); } int Fraction::lcm(int d1, int d2) { int max=(d1>d2) ? d1: d2; do { if((max%d1==0) && (max%d2==0)) { return max; } else { ++max; } } while(max<d1*d2); return d1*d2; } void Fraction::reduce(int n, int d) { int g=gcd(m_n, m_d); m_n=m_n/g; g=g/m_d; } void Fraction::fractionsAddition(int n1, int n2, int d1, int d2) { //return (n1*lcm(d1, d2)+n2*lcm(d1, d2))/lcm(d1, d2); std::cout<<(n1*lcm(d1, d2)+n2*lcm(d1, d2))<<"/"<<lcm(d1,d2); } std::istream &operator>>(std::istream &in, const Fraction &f) { in>>f.m_n1>>f.m_n2>>f.m_d1>>f.m_d2; return in; } std::ostream &operator<<(std::ostream &out, const Fraction &f) { out<<f.m_n1<<"/"<<f.m_d1<<"+"<<f.m_n2<<"/"<<f.m_d2; return out; } int main() { Fraction f(1,4,5,6); std::cout<<f; }
Что я уже пробовал:
Я искал в Google, но не смог найти хорошего ответа
Richard MacCutchan
Этот код, похоже, не имеет никакого отношения к описанию вашего задания. Дробь состоит из двух чисел, числителя и знаменателя. Вам поручено написать методы для +, -, *, /. То, что вы написали, не имеет к этому никакого отношения.