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想要一个+
操作符修改对象(非常量)。但这是真的,这是不明显的理解。。。