自增和自减运算符有前置和后置两种形式,每个重载运算符的函数都必须有明确的特征,使编译器确定要使用的版本。C++规定,前置形式重载为一元运算符函数,后置形式重载为二元运算符函数。
例如,设有类D的对象Dobject,其前置自增表达式和后置自增表达式说明如下:
(1)前置自增表达式
++Aobject ;
若用成员函数重载,则编译器解释为:
Aobject.operator++()
对应的函数原型是:
A& A::operator();
若用友元函数重载,则编译器解释为:
operator++( Aobject )
该函数对应的函数原型是:
friend A& operator++(A &);
(2) 后置自增表达式
Aobject++ ;
若用成员函数重载,则编译器解释为:
Aobject.operator++( 0 )
对应的函数原型是:
A& A::operator( int );
若用友元函数重载,则编译器解释为:
operator++( Aobject, 0 )
该函数对应的函数原型是:
friend A& operator++( A &, int );
在此,参数0是一个伪值,用于与前置形式重载相区别。另外,友元重载函数返回类类型的引用是为了减少函数返回时对象复制的开销,可以根据需要选择是否返回类类型的引用。