2

我只是在阅读有关使用减号(-),增量(++)等的一元运算符重载的信息。我想写一个相同的代码只是为了练习。但是当我尝试运行它时,它给了我减号和增量运算符的错误。我认为问题是我在 main 中调用运算符的方式。谁能请这样做的正确方法是什么?

#include<iostream>

using namespace std;

class c{
   int x;
   int y;
   public:
      c(int a,int b){
             x=a;
             y=b;   
      }

      void operator -(){
             x=x+1;
             y=y+1;
      }

      void display(){
             cout<<x<<" "<<y<<"\n";
      }

};

int main()
{
     c obj(2,3);
     obj.display();
         obj- ;    //I think the error is on this line
     obj.display();
     return 0;
}

如果我用 -obj 替换 obj- 代码可以正常工作。为什么会这样?同样是 ++ 运算符重载的问题(使用 ++obj 工作正常,但 obj++ 不起作用),为什么?

谢谢。

4

3 回答 3

4

一元减号运算-符只是前缀运算符。

要重载运算符的后缀版本++,您需要一个虚拟int参数。例如

struct foo
{
    void operator - ()
    {
        std::cout << "hello" << std::endl;
    }

    void operator ++ (int)
    {
        std::cout << "world" << std::endl;
    }
};

int main()
{
    foo bar;
    -bar;
    bar++;
}
于 2012-04-20T19:26:45.787 回答
2

首先,您不能发明新的运算符,只能重新定义现有的运算符,因此您的一元后减法无法完成。后减运算符(当然)是两个减号,而不仅仅是一个。

其次,当你定义一个递增或递减运算符时,你给函数一个(未使用的)int 参数来区分前置形式和后置形式;如果函数有参数,那么它是一个后增量或后减量操作,但没有它,它是预增量/预减量。

于 2012-04-20T19:26:17.087 回答
1

一元 - 运算符是否定运算符。当你说-5or时会发生这种情况-var。你不说5-var-。如果你在之后var - 3,重载二元运算符。

后自增运算符有一个虚拟 int 参数以将其与前自增运算符区分开来。

于 2012-04-20T19:25:48.863 回答