Использование оператора унарного плюса
Я слышал, что он используется как перегруженный оператор +, например
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);
}