使用一元加运算符

时间:2011-02-25 13:03:41

标签: c++

我听说它被用作重载运算符+例如

class MyClass
{
    int x;
public:
    MyClass(int num):x(num){}
    MyClass operator+(const MyClass &rhs)
    {
        return rhs.x + x;
    }
};

int main()
{
    MyClass x(100);
    MyClass y(100);
    MyClass z = x + y;
}

这真的是使用一元加运算符还是二元+运算符?

4 个答案:

答案 0 :(得分:18)

这不是重载和使用一元+ ..你需要使一个自由函数或使成员函数取0参数

class MyClass
{
    int x;
public:
    MyClass(int num):x(num){}
    MyClass operator+() const
    {
        return *this;
    }
};

int main() {
  MyClass x = 42;
  + x;
}

答案 1 :(得分:5)

那是二元+运算符。要使一元加运算符超载,您需要something like this

答案 2 :(得分:2)

当operator-function是一个成员函数时,它还有一个参数(this),而不是声明中明确提到的参数。所以在你的情况下,它是二进制+,第一个参数是this,第二个参数是传递的参数。

答案 3 :(得分:1)

以前曾经问了几次。

您的运营商+是二进制的。如果定义为成员函数,则需要为const。

class MyClass
{
    int x;
public:
    MyClass(int num):x(num){}
    MyClass operator+(const MyClass &rhs) const
    {
        return rhs.x + x;
    }
};

它经常以operator + =

的形式实现

请注意,你已经改变了交换性,但是对于int来说它是可以交换的。

作为成员的一元+运算符不带参数,也不会修改对象,因此应该是const。实现取决于您的对象。您可以将它用作int的“abs”。 (将它作为无操作使用的目的不大)。

    MyClass MyClass::operator+() const
    {
        return ( x >= 0 ) ? MyClass( x ) : MyClass(-x);
    }