自增运算符 “++” 和自减运算符 “- -” 放置在变量的前面与后面,其作用是有区别的。
在 C++ 2.1 之前的版本在重载“++”(或“- -”)时,不能显式地区分是前缀方式还是后缀方式。也就是说,下面的两条语句是完全相同的:
ob++;
++ob;
在 C++ 2.1 及以后的版本中,C++ 编译器可以通过在运算符函数参数表中是否插入关键字 int 来区分这两种方式。
对于前缀方式 ++ob,可以用运算符函数重载为:
ob.operator++(); //成员函数重载
或
operator++(X &ob); //友元函数重载,其中 ob 为 X 类对象的引用
对于后缀方式 ob++,可以用运算符函数重载为:
ob.operator++(int); //成员函数重载
或
operator++(X &ob,int); //友元函数重载,其中 ob 为 X 类对象的引用
调用时,参数 int 一般被传递给值 0,例如:
class X{
···
public:
···
X.operator++(); //前缀方式
X.operator++(int); //后缀方式
```
};
int main(){
X ob;
···
++ob; //隐式调用 ob.operator++()
ob++; //隐式调用 ob.operator++(int)
ob.operator++();
//显式调用隐式调用 ob.operator++(),指++ob
ob.operator++(0);
//显式调用隐式调用 ob.operator++(),指ob++
···
return 0;
}
类似地,也可重载为友元函数,例如:
···
class Y(){
···
friend operator++(Y&); //前缀方式
friend operator++