1、初学前后置运算符重载时,就不是很清楚,两者的格式究竟有什么不同,今天代码调试了一下,发现区别就在于:
后置运算符重载时比前置运算符多了一个 int 型的形参,它就是一个标记,用于区别前后置,而且规定一定要是一个 int 型的,
至于返回值是否要返回引用型什么的那是具体情境要考虑的东西,要想区分前后置,主要就是看看是否多了一个无用的int型
2、除了这个无效的int型之外,其他参数还是照常传,而且int型的这个无效形参要作为最后一个形参传入,如下面代码中所示:
#include<iostream>
#include<string>
#include<iomanip>
using namespace std;
class M
{
private:
int x, y;
double a, b;
public:
M(int xx = 0,int yy = 0, double aa = 0, double bb = 0):x(xx),y(yy), a(aa), b(bb){
}
void print()
{
cout<<x<<" "<<y<<" "<<a<<" "<<b<<endl;
}
// 对于自定义类对象的前置后置运算符的重载,和一般对象一样,后置会多出来一个int形参
// 多出来一个int就是后置,不多出来就是前置
// 而且多出来的这个标记,必须是 int,如果是其他类型的形参,就不行
friend M operator++(M &m, int);
friend M operator++(M &m);
};
M operator++(M &m)
{
m.x++;
m.y++;
m.a++;
m.b++;
return m;
}
M operator++(M &m, int)
{
m.x += 10;
m.y += 10;
m.a += 10;
m.b += 10;
return m;
}
int main()
{
M m(10,20, 1.2, 3.4);
m.print();
for (int k=0;k<5;k++)
{
++m;
}
m.print();
for (int k=0;k<5;k++)
{
m++;
}
m.print();
return 0;
}