[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