我实现了一个分数类,需要重载算术运算符。
问题是,我是否只能实现const
版本。
例如,补充:
Fraction operator+( const Fraction& other ) const;
由于非const和const Fraction对象都可以调用这个函数,我还需要一个非const operator+
成员函数吗?
答案 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
对象(=>你承诺不会修改的对象),你就无法将它传递给那些不遵守这个承诺的代码。