我正在實現一個分數類,並且需要重載算術運算符。 問題是,我只能執行const
版本。我可以只有const重載的運算符成員函數嗎?
例如,除了:
Fraction operator+(const Fraction& other) const;
由於這兩個非const,和const對象的分數可以調用這個函數,我還需要有一個非const operator+
成員函數?
我正在實現一個分數類,並且需要重載算術運算符。 問題是,我只能執行const
版本。我可以只有const重載的運算符成員函數嗎?
例如,除了:
Fraction operator+(const Fraction& other) const;
由於這兩個非const,和const對象的分數可以調用這個函數,我還需要有一個非const operator+
成員函數?
const
成員函數可以在非const
對象上調用,因此不需要非const
過載。
Fraction a, b;
Fraction c = a + b; // no problem
號你可以調用const
方法在非const
對象,正是因爲你可以有const
引用綁定到非const
對象。 IOW,你總是可以傳遞一個對象,你可以修改它的代碼,保證不會修改它 - 沒有任何安全性的損失。當然是相反的 - 如果你有一個const
對象(=>你承諾不修改的對象),你不能將它傳遞給不遵守這個承諾的代碼。
一般情況下,這樣的問題被較好地解決了與成員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;
}
@juanchopanza - 咄。固定。謝謝! –
非常周到!非常感謝你~~ – Curtis2
很好的建議,但並不完全回答 – user463035818