我听说它被用作重载运算符+例如
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;
}
这真的是使用一元加运算符还是二元+运算符?
答案 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);
}