2015-09-27 20 views
-1

我很難試圖超載運算符[]*。這是給定的代碼:[]和*運算符在C++中爲Rational類重載

#include<iostream> 

class Rational { 
    public: 
    Rational (int numerator=0, int denominator = 1) : n(numerator), d(denominator) { } 
    private: 
    int n, d; 
}; 

std::ostream& operator<<(std :: ostream& out, const Rational& r) { 
    return out << r[0] << '/' << r[1] << std::endl; 
} 

int main() { 
    Rational rat1(2,3), rat2(3,4); 

    std::cout << rat1 << std::endl; 
    std::cout << rat1 * rat2 << std::endl; 
} 

請超載[]和*運營商Rational類

I tried the following: 
#include<iostream> 
class Rational { 
public: 
Rational (int numerator=0 , int denominator = 1) : 
n(numerator),d(denominator) 
{ } 
int operator[](int i){ 
    if(i==0) 
    return n; 
    else return d; 
    } 
Rational& operator*(Rational& rhs){ 
    return *this(n*(rhs.n),d*(rhs.d)); 
} 
private: 
int n,d; 
}; 
std::ostream& operator<<(std :: ostream& out , const Rational& r) { 
return out<<r[0]<<'/'<<r[1]<<std::endl; 
} 
int main(){ 
Rational rat1(2,3) , rat2(3,4); 
std::cout<<rat1<<std::endl; 
std::cout<<rat1*rat2<<std::endl; 
} 

試圖在這之後我收到以下錯誤:

error: passing ‘const Rational’ as ‘this’ argument of ‘int Rational::operator[](int)’ discards qualifiers [-fpermissive] 
return out<<r[0]<<'/'<<r[1]<<std::endl; 

error: passing ‘const Rational’ as ‘this’ argument of ‘int Rational::operator[](int)’ discards qualifiers [-fpermissive] 
return out<<r[0]<<'/'<<r[1]<<std::endl; 

我在做什麼錯誤?

+0

我懷疑downvotes和投票結束是爲了迴應糟糕的代碼格式。如果你花費一點努力使問題更容易理解,你會得到更好的答覆。所以我爲你修好了。 –

+0

向我們展示您已經嘗試過的東西也是一個不錯的主意。否則,感覺就像你只是要求我們爲你做功課一樣。 –

+0

Thanks.I編輯了代碼,我也顯示了我嘗試過的內容,但無法解決此問題。 – Aditya

回答

0

的問題是這一行:

return *this(n * (rhs.n), d * (rhs.d)); 

應該

return * new Rational(n * rhs.n, d * rhs.d); 

您需要創建並通過調用構造函數,這是從來沒有通過this指針完成返回一個新Rational

你也應該驗證輸入:rat1[6]應該會產生一個錯誤。

+0

我甚至試圖做到這一點,但徒勞無功。與以往一樣的錯誤依然存在。 – Aditya

+0

更新了與g ++ v4.8.4一起使用的解決方案。 –