[C con Clase] Sobrecarga de operadores unitarios sufijos.
Zakariae El-Abdelouarti
shanatorio en gmail.com
Lun Feb 16 02:22:48 CET 2009
Hola a todos!
Estoy leyendo este capítulo del curso de C++:
http://c.conclase.net/curso/index.php?cap=035c
En el mismo (está copiado al final de este correo) existe un ejemplo
sobre el que tengo
las siguientes preguntas:
1) ¿Por qué la segunda declaración del operador ++ tiene como
argumento una variable
de tipo int?
2) ¿Por qué esta variable no es usada en la implementación del operador?
En el mismo artículo hay un párrafo que dice:
"Cuando se usa un operador en la forma sufijo dentro de una expresión,
primero se usa
el valor actual del objeto, y una vez evaluada la expresión, se aplica
el operador. Si nosotros
queremos que nuestro operador actúe igual deberemos usar un objeto
temporal, y asignarle
el valor actual del objeto. Seguidamente aplicamos el operador al
objeto actual y finalmente
retornamos el objeto temporal."
3) Seguramente no he logrado entender este párrafo tan intenso. Pero
he sacado la conclusión
de que tenemos que elegir entre un comportamiento, prefijo o sufijo,
dependiendo de la implementación
(usando objetos temporales o no) que hagamos.
Espero vuestras respuestas.
Muchas gracias.
Zaka.
/*****************************************************************************************************/
Aquí está el ejemplo:
class Tiempo {
...
Tiempo operator++(); // Forma prefija
Tiempo operator++(int); // Forma sufija
...
};
Tiempo Tiempo::operator++() {
minuto++;
while(minuto >= 60) {
minuto -= 60;
hora++;
}
return *this;
}
Tiempo Tiempo::operator++(int) {
Tiempo temp(*this); // Constructor copia
minuto++;
while(minuto >= 60) {
minuto -= 60;
hora++;
}
return temp;
}
...
// Prueba:
T1.Mostrar();
(T1++).Mostrar();
T1.Mostrar();
(++T1).Mostrar();
T1.Mostrar();
...
Más información sobre la lista de distribución Cconclase