Использование оператора унарного плюса

Я слышал, что он используется как перегруженный оператор +, например

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;
}

Действительно ли это использование оператора унарного плюса или это действительно бинарный + оператор?

Ответ 1

Это не перегрузка и использование унарного+. Вам нужно либо сделать эту бесплатную функцию, либо сделать функцию-членной командой 0 аргументов

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

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

Ответ 2

Это двоичный + оператор. Чтобы перегрузить оператор унарного плюса, вам понадобится что-то вроде этого.

Ответ 3

Когда оператор-функция является функцией-членом, она имеет еще один аргумент (this), который явно упоминается в объявлении. Таким образом, в вашем случае это двоичный файл +, первый аргумент this, второй - переданный аргумент.

Ответ 4

Это было задано несколько раз раньше.

Ваш оператор + является двоичным. Если определенная как функция-член должна быть const.

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

Это довольно часто реализуется в терминах оператора + =

Обратите внимание, что вы переключили коммутативность, но она будет работать как + для int, которая является коммутативной.

Унарный + оператор в качестве члена не принимает никаких параметров и не будет изменять объект, поэтому должен быть const. Реализация зависит от вашего объекта. Вы можете использовать его как "abs" для вашего int. (Использование его как нет-op служит для небольшой цели).

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