重载Postfix和前缀运算符

时间:2015-08-18 14:42:15

标签: c++ class operator-overloading

我想知道这是否是重载post和pre increment运算符的正确代码。

如何在main()中调用这些运算符。

class fix{
int x;
int y;
public:fix(int = 0, int = 0);
   fix operator++(){//prefix increment
       fix a;
       ++a.x;
       ++a.y; 
       return a;
}
   fix operator++(int){ //post fix increment
       fix c;
       c.x = x;
       c.y = y;
       x++; y++;
       return c;
   }
};

1 个答案:

答案 0 :(得分:5)

此运算符

   fix operator++(){
       fix a;
       ++a.x;
       ++a.y; 
       return a;
}

不适用于原始对象。也就是说它不会改变原始对象。当然,你可以用这种方式定义它,但它会使用户感到困惑并且有不寻常的行为。

最好按以下方式定义

   fix & operator ++()
   {
       ++x;
       ++y; 
       return *this;
   }

对于后缀运算符,它是正确定义的。至于我,我会用以下方式定义它

   const fix operator ++( int )
   {
       fix c( *this );
       ++x; ++y;

       return c;
   }

或者您可以通过以下方式定义

   const fix operator ++( int )
   {
       fix c( *this );

       ++*this; // or operator ++()

       return c;
   }

在main中,可以通过以下方式调用它们

fix f1( 10, 10 );
fix f2 = f1++;
fix f3( 10, 10 );
fix f4 = ++f1;
fix f5( 10, 10 );
fix f6 = f5.operator++( 0 );
fix f7( 10, 10 );
fix f8 = f7.operator++();