C ++ Primer 5th notes (capítulo 14 operación de sobrecarga y conversión de tipo) operadores de incremento y decremento

  • 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++();		//前置版本

Supongo que te gusta

Origin blog.csdn.net/thefist11cc/article/details/113928259
Recomendado
Clasificación