Write a class Fraction that defines adding, subtracting, multiplying, and
dividing fractions by overloading standard operators for these operations. Write
a function member for reducing factors and overload I/O operators to input and
output fractions
#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)
{
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;
}
What I have tried:
I have searched on Google, but I couldn't find a good response