¿Cómo sobrecargar el operador ++ de dos formas diferentes para sufijo a++
y prefijo ++a
?
c++
operator-overloading
novato
fuente
fuente
Respuestas:
Debería verse así:
fuente
Number operator++ (int)
toma anint
como parámetro aunque no lo use?++x
is prefix y por lo tanto llamaoperator++()
whilex++
is postfix y por tanto llamaoperator++(int)
La diferencia radica en qué firma elige para su (s) sobrecarga (s) de
operator ++
.Citado del artículo relevante sobre este tema en las preguntas frecuentes de C ++ (vaya allí para obtener más detalles):
PD: Cuando me enteré de esto, todo lo que vi inicialmente fue el parámetro ficticio, pero los diferentes tipos de retorno son en realidad más interesantes; podrían explicar por qué
++x
se considera más eficiente quex++
en general .fuente
Tiene dos formas de sobrecargar los dos operadores (prefijo / sufijo) ++ para un tipo T:
Método de objeto:
Esta es la forma más sencilla, utilizando el modismo de programación orientada a objetos "común".
Función de objeto no miembro:
Esta es otra forma de hacer esto: siempre que las funciones estén en el mismo espacio de nombres que el objeto al que se refieren también, se considerarán cuando el compilador busque una función para manejar
++t ;
ot++ ;
codificar:Es importante recordar que, desde el punto de vista de C ++ (incluido el punto de vista del compilador de C ++), esas funciones que no son miembros siguen siendo parte de la interfaz de T (siempre que estén en el mismo espacio de nombres).
Hay dos ventajas potenciales de la notación de función no miembro:
fuente
Declare así:
Implemente correctamente: no se meta con lo que todos saben que hacen (incremente y luego use, use y luego incremente).
fuente
Sé que es tarde, pero tuve el mismo problema y encontré una solución más simple. No me malinterpretes, esta es la misma solución que la principal (publicada por Martin York). Es un poco más simple. Solo un poco. Aquí está:
La solución anterior es un poco más simple porque no usa un objeto temporal en el método postfix.
fuente