自增运算符 “++” 和自减运算符 “- -” 放置在变量的前面与后面,其作用是有区别的。
在 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++(Y&,int

本文介绍了在C++ 2.1及更高版本中如何通过成员函数和友元函数重载前缀和后缀自增运算符"++"和自减运算符"--"。区别在于是否在运算符函数参数中加入int关键字来区分前缀和后缀形式。并给出了使用成员函数和友元函数的实例。
最低0.47元/天 解锁文章
5145





