我刚刚阅读了使用减号( - ),增量(++)等的一元运算符重载。我想为练习编写相同的代码。但是当我试图运行它时,它给我减去和增量运算符的错误。我认为问题是我在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 ++不起作用),为什么?
感谢。
答案 0 :(得分:4)
一元减号运算符-
仅是前缀运算符。
要重载++
运算符的后缀版本,您需要一个虚拟的 int 参数。 e.g。
struct foo
{
void operator - ()
{
std::cout << "hello" << std::endl;
}
void operator ++ (int)
{
std::cout << "world" << std::endl;
}
};
int main()
{
foo bar;
-bar;
bar++;
}
答案 1 :(得分:2)
首先,你不能发明新的操作符,只能重新定义现有的操作符,所以你的一元post-minus无法完成。后递减运算符(当然)是两个减号,而不仅仅是一个。
其次,当你定义一个递增或递减运算符时,你给函数一个(未使用的)int参数来区分pre-form和post-form;如果函数有参数,则它是后递增或后递减操作,但没有它,它是预递增/预递减。
答案 2 :(得分:1)
一元运算符是否定运算符。当你说-5
或-var
时会发生这种情况。您没有说5-
或var-
。如果您在var - 3
之后,请重载二元运算符。
postincrement运算符有一个伪int参数,以区别于preincrement运算符。