在主函数中测试如下:

#include<iostream>
#include<algorithm>
#include "Point.h"
using namespace std;


int main()
{

 Point pt1(3,4);
 Point pt2(4,5);
 
 ++pt1;
 --pt2;
 cout<<pt1.getX()<<pt1.getY()<<endl<<pt2.getX()<<pt2.getY()<<endl;
 //cout<<(pt1==pt2)<<endl<<(pt1==pt1)<<endl<<(pt1!=pt2)<<endl;
 
 return 0;
}

  同时定义前缀式操作符与后缀式操作符存在一个问题:他们的形参数目和类型相同,普通重载不能区别所定义的是前缀式操作符还是后缀式操作符。

  为了解决这一问题,后缀式操作符接受一个额外的int形参。使用后缀式操作符时,编译器提供0作为这个形参的实参。尽管我们的前缀式操作符可以使用这个额外的形参,但通常不应该这样做。那个形参不是后缀式操作符的正常工作所需要的,它的作用是使后缀式函数与前缀式函数区别开。

  在头文件中定义如下:

 Point operator++(int);
 Point operator--(int);

  在源文件中实现:

Point Point::operator ++(int)
{
 Point p(*this);
 ++*this;
 return p;

}

Point Point::operator --(int)
{

 Point p(*this);
 --*this;
 return p;
}

  在主函数中测试成功:

#include<iostream>
#include<algorithm>
#include "Point.h"
using namespace std;


int main()
{

 Point pt1(3,4);
 Point pt2(4,5);
 
// ++pt1;
// --pt2;
 //cout<<pt1.getX()<<pt1.getY()<<endl<<pt2.getX()<<pt2.getY()<<endl;
 //cout<<(pt1==pt2)<<endl<<(pt1==pt1)<<endl<<(pt1!=pt2)<<endl;
 Point pt3=pt1--;
 cout<<pt3.getX()<<endl<<pt3.getY()<<endl;
 return 0;
}

  打印的是pt1自减之前的值。

  注意:使用对象显式调用后缀式自减或自加时,应该传入一个参数:

  Point pt;

  pt.operator++(0);  这样是调用后缀式的操作。