2012-06-08 51 views
0

所以我正在爲我的OO類寫一個mixed numerals類。我們需要重載每一個比較和布爾操作數(除其他外),但我在如何考慮'<'和'>''操作數時遇到了麻煩。這裏是我的'=='和'!='操作數函數的一些上下文。混合數字類操作數重載C++

編輯:另外如果任何人有任何提示加/減法的方式,我將不勝感激。

bool operator ==(Mixed& mn1, Mixed& mn2){ 

mn1.ToFraction(); 
mn2.ToFraction(); 

mn1.Simplify(); 
mn2.Simplify(); 

if(mn1.numerator == mn2.numerator && mn1.denominator == mn2.denominator) 
    return true; 
else 
    return false; 
} 

bool operator !=(Mixed& mn1, Mixed& mn2){ 
mn1.ToFraction(); 
mn2.ToFraction(); 

mn1.Simplify(); 
mn2.Simplify(); 

if(mn1.numerator == mn2.numerator && mn1.denominator == mn2.denominator) 
    return false; 
else 
    return true; 
} 

如果有人可以提供一些指導,我會很感激。哦,我們不能將它們轉換成小數進行比較。

編輯:這是我的標題。

#include <iostream> 

using namespace std; 

class Mixed 
{ 
public: 
Mixed(int integer, int numerator = 0, int denominator = 1); 
Mixed(int integer = 0); 
double Evaluate(); 
void ToFraction(); 
void Simplify(); 

friend istream& operator >>(istream& in, Mixed& mn); 
friend ostream& operator <<(ostream& out, Mixed& mn); 

friend bool operator ==(Mixed& mn1, Mixed& mn2); 
friend bool operator !=(Mixed& mn1, Mixed& mn2); 
friend bool operator >(Mixed& mn1, Mixed& mn2); 
friend bool operator <(Mixed& mn1, Mixed& mn2); 
friend bool operator <=(Mixed& mn1, Mixed& mn2); 
friend bool operator >=(Mixed& mn1, Mixed& mn2); 

friend const Mixed operator +(Mixed& mn1, Mixed& mn2); 
friend const Mixed operator -(Mixed& mn1, Mixed& mn2); 
friend const Mixed operator *(Mixed& mn1, Mixed& mn2); 
friend const Mixed operator /(Mixed& mn1, Mixed& mn2); 

private: 
int GCD(int a, int b); 
int integer, numerator, denominator; 
}; 
+1

不要改變你的論點'混合常量&' –

+0

如果我這樣做,我失去的能力調用我的ToFraction()和Simplify()函數。 –

+0

「混合數字」是指「有理數」嗎? –

回答

2

有理數真的很直截了當:有理數是一對(A,B)的整數,通常寫爲a/b,到等價的是(A,B)≡(A」,B ')當且僅當ab'= a'b。

struct Rational 
{ 
    int p;   // numerator 
    unsigned int q; // denominator 

    bool operator==(Rational const & rhs) const 
    { 
     return p * rhs.q == rhs.p * q; 
    } 

    // ... 
}; 

兩年積極有理數,您通過p * rhs.q < rhs.p * q有不等式:

所以如果你的類包含兩個代表整數pq,您可以實現平等的運營商。所有其他關係都可以用這兩種方式來實現,例如, x <= y!(y < x)相同

通過將分子和分母除以它們的GCD,可以完成有理項到最低項的取消,就像您已經實施的那樣。

「混合」數字,即整數加上有理數小於1,被平凡地轉換爲通常的分子 - 分母有理表示進行操作,然後通過積分除法和餘數回到混合形式。

+1

爲了正確地跟蹤你,你的例子中的p和q分別代表分子和分母? –

+0

@ConnorBlack:的確如此。 –

+0

哦,你最好的人。謝謝。 –

1

爲了比較合理性,您通常希望找到一個公分母,然後比較分子。對於這樣的比較,你也不需要減少到最低限度的條件(儘管這樣做很快或很容易,通常是相當無害的)。

如果你決定把你的相等比較,因爲它們是,可以簡化他們有點像:

bool operator ==(Mixed mn1, Mixed mn2){  
    mn1.ToFraction(); 
    mn2.ToFraction(); 

    mn1.Simplify(); 
    mn2.Simplify(); 

    return mn1.numerator == mn2.numerator && mn1.denominator == mn2.denominator; 
} 
+0

謝謝我沒有看到。我會改變我的代碼來反映這一點。 –

+0

你應該提到,最好是通過數值參數而不是在operator ==中修改它們。 –

+0

@MooingDuck:糟糕 - 甚至沒有注意到這一點。謝謝。 –