我可以只有const重载的运算符成员函数吗?

时间:2016-04-09 16:19:20

标签: c++ operator-overloading

我实现了一个分数类,需要重载算术运算符。 问题是,我是否只能实现const版本。

例如,补充:

Fraction operator+( const Fraction& other ) const;

由于非const和const Fraction对象都可以调用这个函数,我还需要一个非const operator+成员函数吗?

3 个答案:

答案 0 :(得分:3)

const个成员函数可以在非const个对象上调用,所以不,你不需要非const重载。

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

答案 1 :(得分: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;
}

答案 2 :(得分:2)

没有。您可以在非const个对象上调用const方法,就像const个引用绑定到非const个对象一样。 IOW,你总是可以将你可以修改的对象传递给承诺不会修改它的代码 - 没有安全性损失。当然事实恰恰相反 - 如果你有一个const对象(=>你承诺不会修改的对象),你就无法将它传递给那些不遵守这个承诺的代码。