2016-04-09 68 views
0

我正在實現一個分數類,並且需要重載算術運算符。 問題是,我只能執行const版本。我可以只有const重載的運算符成員函數嗎?

例如,除了:

Fraction operator+(const Fraction& other) const; 

由於這兩個非const,和const對象的分數可以調用這個函數,我還需要有一個非const operator+成員函數?

回答

3

const成員函數可以在非const對象上調用,因此不需要非const過載。

Fraction a, b; 
Fraction c = a + b; // no problem 
2

號你可以調用const方法在非const對象,正是因爲你可以有const引用綁定到非const對象。 IOW,你總是可以傳遞一個對象,你可以修改它的代碼,保證不會修改它 - 沒有任何安全性的損失。當然是相反的 - 如果你有一個const對象(=>你承諾不修改的對象),你不能將它傳遞給不遵守這個承諾的代碼。

3

一般情況下,這樣的問題被較好地解決了與成員operator+=和非成員operator+,像這樣:

class Fraction { 
public: 
    const Fraction& operator+=(const Fraction&); 
}; 

Fraction operator+(const Fraction& lhs, const Fraction& rhs) { 
    Fraction res(lhs); 
    res += rhs; 
    return res; 
} 
+1

@juanchopanza - 咄。固定。謝謝! –

+0

非常周到!非常感謝你~~ – Curtis2

+2

很好的建議,但並不完全回答 – user463035818

相關問題