在C++中使用const替换两个参数的运算符

Dan*_*Dan 0 c++ overriding overloading operator-overloading

我正在尝试使用两个const参数创建一个重写的运算符函数,但我无法弄清楚如何做到这一点.这是一个简单的例子:

class Number
{
    Number()
    {
        value = 1;
    };

    inline Number operator + (const Number& n)
    {
        Number result;

        result.value = value + n.value;
        return result;
    }

    int value;
}
Run Code Online (Sandbox Code Playgroud)

我在这里尝试做的是将两个参数传递给另外的函数,这两个参数都是const并返回结果而不更改类中的任何内容:

const Number a = Number();
const Number b = Number();
Number c = a + b;
Run Code Online (Sandbox Code Playgroud)

这是可能的,我将如何做到这一点?

谢谢,

CB *_*ley 7

inline 在类声明中理解,因此您不需要指定它.

大多数惯用语,你会operator+在类定义之外声明一个非成员函数,如下所示:

Number operator+( const Number& left, const Number& right );
Run Code Online (Sandbox Code Playgroud)

friend如果它需要访问Number内部,你可能需要使它成为类的一部分.

如果你必须将它作为成员函数,那么你需要使函数本身为const:

Number operator+( const Number& n ) const
{ // ...
Run Code Online (Sandbox Code Playgroud)

对于类这样的类Number,operator+通常按照通常的方式实现,operator+=您希望所有常用运算符按预期工作,并且operator+=通常更容易实现,并且operator+不会因为单独实现它而失去任何效率.

课堂内:

Number& operator+=( const Number& n );
Run Code Online (Sandbox Code Playgroud)

课外:

Number operator+( const Number& left, const Number& right )
{
    return Number( left ) += right;
}
Run Code Online (Sandbox Code Playgroud)

甚至:

Number operator+( Number left, const Number& right )
{
    return left += right;
}
Run Code Online (Sandbox Code Playgroud)