簡體   English   中英

我只能使用const重載運算符成員函數嗎?

[英]Can I only have const overloaded operator member function?

我正在實現一個分數類,並且需要重載算術運算符。 問題是,我只能實現const版本。

例如,加法:

Fraction operator+( const Fraction& other ) const;

由於非const對象和const Fraction對象都可以調用此函數,因此我仍然需要非const operator+成員函數嗎?

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

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

通常,使用member operator+=和nonmember operator+可以更好地解決此類問題,如下所示:

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

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

可以。您可以在非const對象上調用const方法,就像將const引用綁定到非const對象一樣。 IOW,您始終可以將可以修改的對象傳遞給承諾不對其進行修改的代碼-不存在安全損失。 相反,這是不正確的-如果您有const對象(=>您承諾不會修改的對象),則無法將其傳遞給不遵守此承諾的代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM