python一元减运算符_详解C++编程中一元运算符的重载

可重载的一元运算符如下:

!(逻辑“非”)

&(取址)

~(二进制反码)

*(取消指针引用)

+(一元加)

-(一元求反)

++(递增)

--(递减)

转换运算符

后缀递增和递减运算符(++ 和 ––)在递增和递减中单独处理,下面会讲到。

以下规则适用于所有其他一元运算符。若要将一元运算符函数声明为非静态成员,则必须用以下形式声明它:

ret-type operator op ()

其中 ret-type 是返回类型,op 是上表中列出的运算符之一。

若要将一元运算符函数声明为全局函数,则必须用以下形式声明它:

ret-type operator op (arg )

其中 ret-type 和 op 如上所述用于成员运算符函数,arg 是要参与运算的类类型的参数。

注意一元运算符的返回类型没有限制。例如,逻辑“非”(!) 返回整数值是合理的,但并非强制性的。

递增和递减运算符重载由于递增和递减运算符各有两个变量,因此它们属于一个特殊类别:

前置递增和后置递增

前置递减和后置递减

编写重载的运算符函数时,为这些运算符的前缀和后缀版本实现单独的版本很有用。若要区分这两者,请遵循以下规则:运算符的前缀形式与声明任何其他一元运算符的方式完全相同;后缀形式接受 int 类型的其他参数。

注意当为递增或递减运算符的前缀形式指定重载运算符时,其他参数的类型必须是 int;指定任何其他类型都将产生错误。

以下示例显示如何为 Point 类定义前缀和后缀递增和递减运算符:

// increment_and_decrement1.cpp

class Point

{

public:

// Declare prefix and postfix increment operators.

Point& operator++(); // Prefix increment operator.

Point operator++(int); // Postfix increment operator.

// Declare prefix and postfix decrement operators.

Point& operator--(); // Prefix decrement operator.

Point operator--(int); // Postfix decrement operator.

// Define default constructor.

Point() { _x = _y = 0; }

// Define accessor functions.

int x() { return _x; }

int y() { return _y; }

private:

int _x, _y;

};

// Define prefix increment operator.

Point& Point::operator++()

{

_x++;

_y++;

return *this;

}

// Define postfix increment operator.

Point Point::operator++(int)

{

Point temp = *this;

++*this;

return temp;

}

// Define prefix decrement operator.

Point& Point::operator--()

{

_x--;

_y--;

return *this;

}

// Define postfix decrement operator.

Point Point::operator--(int)

{

Point temp = *this;

--*this;

return temp;

}

int main()

{

}

可使用以下函数头在文件范围中(全局)定义同一运算符:

friend Point& operator++( Point& ) // Prefix increment

friend Point& operator++( Point&, int ) // Postfix increment

friend Point& operator--( Point& ) // Prefix decrement

friend Point& operator--( Point&, int ) // Postfix decrement

表示递增或递减运算符的后缀形式的 int 类型的参数不常用于传递参数。它通常包含值 0。但是,可按以下方式使用它:

// increment_and_decrement2.cpp

class Int

{

public:

Int &operator++( int n );

private:

int _i;

};

Int& Int::operator++( int n )

{

if( n != 0 ) // Handle case where an argument is passed.

_i += n;

else

_i++; // Handle case where no argument is passed.

return *this;

}

int main()

{

Int i;

i.operator++( 25 ); // Increment by 25.

}

除显式调用之外,没有针对使用递增或递减运算符来传递这些值的语法,如前面的代码所示。实现此功能的更直接的方法是重载加法/赋值运算符 (+=)。

你可能感兴趣的:(python一元减运算符)