From 2a10c5480a1c56ff2690c010b99fc0db3e9e1a3d Mon Sep 17 00:00:00 2001 From: Tobias Berger Date: Fri, 24 Sep 2021 11:50:07 +0200 Subject: [PATCH] Refactoring - Remove `this->` - Avoid possible divide by 0 - Invert ternary operator in lcm to be more readable --- fraction.cpp | 44 +++++++++++++++++++++++++------------------- 1 file changed, 25 insertions(+), 19 deletions(-) diff --git a/fraction.cpp b/fraction.cpp index ea1e5fe..de3e8be 100644 --- a/fraction.cpp +++ b/fraction.cpp @@ -13,11 +13,10 @@ namespace FractionNS { p %= q; } } - int lcm(int p, int q) { int gcd = FractionNS::gcd(p, q); - return gcd != 0 ? (p / gcd * q) : 0; + return gcd == 0 ? 0 : (p / gcd * q); } void Fraction::reduce() @@ -42,30 +41,37 @@ namespace FractionNS { Fraction::Fraction(int numerator, int denominator) { if(denominator == 0) throw divide_by_zero_error(); - this->m_numerator = numerator; - this->m_denominator = denominator; + m_numerator = numerator; + m_denominator = denominator; reduce(); } Fraction::Fraction(const int n) { - this->m_numerator = n; - this->m_denominator = 1; + m_numerator = n; + m_denominator = 1; } Fraction::Fraction(const Fraction& n) { - this->m_numerator = n.getNumerator(); - this->m_denominator = n.getDenominator(); + m_numerator = n.getNumerator(); + m_denominator = n.getDenominator(); } int Fraction::getNumerator() const { return m_numerator; } int Fraction::getDenominator() const { return m_denominator; } void Fraction::setNumerator(int numerator) { - auto gcd = FractionNS::gcd(numerator, this->m_denominator); - this->m_numerator = numerator / gcd; + auto gcd = FractionNS::gcd(numerator, m_denominator); + m_numerator = numerator / gcd; } void Fraction::setDenominator(int denominator) { if(denominator == 0) throw divide_by_zero_error(); - auto gcd = FractionNS::gcd(this->m_numerator, denominator); - this->m_denominator = denominator / gcd; + auto gcd = FractionNS::gcd(m_numerator, denominator); + if(gcd == 0) + { + m_denominator = 1; + } + else + { + m_denominator = denominator / gcd; + } } QString Fraction::display() const { @@ -89,8 +95,8 @@ namespace FractionNS { return (double(m_numerator) / double(m_denominator)) == n; } bool Fraction::operator==(const Fraction& other) const { - return (this->m_numerator == other.getNumerator()) - && (this->m_denominator == other.getDenominator()); + return (m_numerator == other.getNumerator()) + && (m_denominator == other.getDenominator()); } bool Fraction::operator!=(const int n) const { @@ -103,8 +109,8 @@ namespace FractionNS { return (double(m_numerator) / double(m_denominator)) != n; } bool Fraction::operator!=(const Fraction& other) const { - return (this->m_numerator != other.getNumerator()) - || (this->m_denominator != other.getDenominator()); + return (m_numerator != other.getNumerator()) + || (m_denominator != other.getDenominator()); } bool Fraction::operator<(const int n) const { @@ -181,7 +187,7 @@ namespace FractionNS { } Fraction& Fraction::operator+=(const int n) { - this->m_numerator = m_numerator + (n * m_denominator); + m_numerator += n * m_denominator; reduce(); return *this; } @@ -195,8 +201,8 @@ namespace FractionNS { auto ownNumeratorPart = m_numerator * (lcm / m_denominator); auto otherNumeratorPart = other.getNumerator() * (lcm / other.getDenominator()); - this->m_numerator = ownNumeratorPart + otherNumeratorPart; - this->m_denominator = lcm; + m_numerator = ownNumeratorPart + otherNumeratorPart; + m_denominator = lcm; reduce(); return *this;