-
No es necesario que los operadores de incremento y decremento deban ser funciones miembro de la clase, pero debido a que este operador cambia el estado del objeto en el que se opera, se recomienda establecerlos como funciones miembro.
-
Para ser coherente con la versión incorporada, el operador anterior debe devolver la referencia del objeto después de incrementar o disminuir.
-
Para ser coherente con la versión incorporada, el operador de publicación debe devolver el valor del objeto antes del incremento o decremento, no una referencia.
-
Los operadores de incremento y decremento deben definir las versiones pre y post al mismo tiempo.
-
La forma sobrecargada normal no puede distinguir entre preoperación y posoperación. Para resolver este problema, la versión posterior agrega un parámetro de tipo int no utilizado adicional:
class StrBlobPtr
{
public:
// increment and decrement
//前置版本
StrBlobPtr& operator++(); // prefix operators
StrBlobPtr& operator--();
//后置版本
StrBlobPtr operator++(int); // postfix operators
StrBlobPtr operator--(int);
};
StrBlobPtr & StrBlobPt::operator++()
{
check(curr,"increment past end of StrBlobPtr");
++cur;
return *this;
}
StrBlobPtr & StrBlobPt::operator--()
{
--cur;
check(curr,"increment past end of StrBlobPtr");
return *this;
};
//后置版本调用前置版本来完成
StrBlobPtr & StrBlobPt::operator++(int)
{
StrBlobPt ret = *this;
++*this;
return ret;
}
//后置版本调用前置版本来完成
StrBlobPtr & StrBlobPt::operator--(int)
{
StrBlobPt ret = *this;
--*this;
return ret;
};
Si desea utilizar operadores posteriores al incremento o decremento mediante llamadas a funciones, debe pasar un valor para su parámetro de número entero y llamarlo explícitamente.
StrBlobPtr p(a);
p.operator++(0); //后置版本
p.operator++(); //前置版本