增量和减量(C++)
,因为在每个的两个变量,增量和减量运算符属于特定类别:
Preincrement 和 postincrement
Predecrement 和 postdecrement
当您编写重载运算符函数,实现标题的单独版本和后缀这些运算符的版本非常有用。为了区分二者之间,遵循以下规则:运算符的前缀形式声明相同的方式与其他一元运算符;后缀形式接受类型 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.
}
除了显式调用之外,如前面的代码所示,没有语法用于递增或递减运算符将这些值,。一种更简单的方法实现此功能将重载 " 添加/赋值运算符 (+=)。