C++ 我只能有常量重载的运算符成员函数吗?

C++ 我只能有常量重载的运算符成员函数吗?,c++,operator-overloading,C++,Operator Overloading,我正在实现一个分数类,需要重载算术运算符。 问题是,我只能实现const版本 例如,添加: Fraction operator+( const Fraction& other ) const; 既然非常量和常量分数对象都可以调用这个函数,我还需要一个非常量操作符+成员函数吗?const成员函数可以在非const对象上调用,所以不需要非const重载 Fraction a, b; Fraction c = a + b; // no problem 不可以。您可以在非const对象上调用

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

例如,添加:

Fraction operator+( const Fraction& other ) const;

既然非常量和常量分数对象都可以调用这个函数,我还需要一个非常量
操作符+
成员函数吗?

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

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

不可以。您可以在非
const
对象上调用
const
方法,就像您可以将
const
引用绑定到非
const
对象一样。照此,您总是可以将可以修改的对象传递给承诺不会修改它的代码-不会失去安全性。当然,情况并非如此——如果你有一个
常量对象(=>一个你承诺不修改的对象),你就不能将它传递给不遵守这个承诺的代码。

一般来说,这种问题最好由成员
操作符+=
和非成员
操作符+
解决,如下所示:

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

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

@juanchopanza-duh。固定的。谢谢非常周到!非常感谢您~~@tobi303:是的,但可能问题问得不对……当您仔细阅读时,您可能会理解Curtis2想要一个
+
操作符修改对象(非常量)。但这是真的,这是不明显的理解。。。