增量和减量(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.
}

除了显式调用之外,如前面的代码所示,没有语法用于递增或递减运算符将这些值,。一种更简单的方法实现此功能将重载 " 添加/赋值运算符 (+=)。

请参见

参考

运算符重载