LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 212|回复: 0

递增和递减运算符重载

[复制链接]
发表于 2024-2-1 21:59:32 | 显示全部楼层 |阅读模式
由于递增和递减运算符各有两个变量,因此它们属于一个特殊类别:

前置递增和后置递增

前置递减和后置递减

编写重载的运算符函数时,为这些运算符的前缀和后缀版本实现单独的版本很有用。 若要区分这两者,请遵循以下规则:运算符的前缀形式与声明任何其他一元运算符的方式完全相同;后缀形式接受 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:perator++()
{
   _x++;
   _y++;
   return *this;
}

// Define postfix increment operator.
Point Point:perator++(int)
{
   Point temp = *this;
   ++*this;
   return temp;
}

// Define prefix decrement operator.
Point& Point:perator--()
{
   _x--;
   _y--;
   return *this;
}

// Define postfix decrement operator.
Point Point:perator--(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 ); // Postfix increment operator
private:
    int _i;
};

Int Int:perator++( int n )
{
    Int result = *this;
    if( n != 0 )    // Handle case where an argument is passed.
        _i += n;
    else
        _i++;       // Handle case where no argument is passed.
    return result;
}

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

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表