首页 > 开发 > C++ > 正文

对运算符++进行重载,前置和后置区分的原理

2017-09-11 21:18:58  来源: 网友分享
 #include <iostream> using namespace std; struct Date {    void  operator++()    {      cout << "oprator++()" <<endl;    }    void  operator++(int)     {      cout << "oprator++(int)" <<endl;    }};int main(){    Date  date;    ++date;      date++;}

为什么++date对应的是++(),而不是++(int)
然后为什么++(int)里面只能是int,试了float和Date都不行,我明明是用的Date对象进行的++操作啊

解决方案

由于++操作符本身无论前置或者后置都不接受任何参数,所以如果不做干预的话,无论前置还是后置的声明都是一样的。

void operator++();

这样子肯定不行啊,前置和后置的操作符重载应该区分开。
所以C++规定后置的操作符重载接受一个int作为参数(但是没有用):

void operator++(int);

这样子就可以区分开两个重载了。
不用问这个为什么是int,别的都不行,因为就是这么规定的。