diff --git a/include/NR.h b/include/NR.h index 2c67fa0..5799569 100644 --- a/include/NR.h +++ b/include/NR.h @@ -33,7 +33,9 @@ class NR { NR& operator*=(const NR& opNR); NR& operator/=(const NR& opNR); - void Invert(); + NR operator-() const; + + NR Inverse() const; friend std::ostream& operator<<(std::ostream& os, const NR& opNR); friend std::istream& operator>>(std::istream& os, NR& opNR); diff --git a/src/NR.cpp b/src/NR.cpp index b32d64e..19526b2 100644 --- a/src/NR.cpp +++ b/src/NR.cpp @@ -19,6 +19,7 @@ NR::NR(int entier) : m_Numerator(entier), m_Denominator(1) {} NR::NR(int numerator, int denominator) : m_Numerator((denominator > 0) ? numerator : -numerator), m_Denominator(std::abs(denominator)) { assert(denominator != 0); + Reduce(); } void NR::Reduce() { @@ -27,8 +28,9 @@ void NR::Reduce() { m_Numerator /= divisor; } -void NR::Invert() { - *this = NR(m_Denominator, m_Numerator); +NR NR::Inverse() const { + assert(*this != 0); + return {m_Denominator, m_Numerator}; } int NR::GetNumerator() const { @@ -128,3 +130,7 @@ NR& NR::operator/=(const NR& opNR) { *this = *this / opNR; return *this; } + +NR NR::operator-() const { + return {-m_Numerator, m_Denominator}; +} \ No newline at end of file