• Domingo 15 de Diciembre de 2024, 02:37

Autor Tema:  Sobrecarca Operador ++  (Leído 1033 veces)

Diodo

  • Moderador
  • ******
  • Mensajes: 658
    • Ver Perfil
    • http://www.solocodigo.com
Sobrecarca Operador ++
« en: Jueves 5 de Agosto de 2004, 11:29 »
0
Hola a todos

estoy haciendo una clase para ir cambiando los turnos en una partida de trivial

la clase que utilizo es esta:


// fichero .h

Código: Text
  1.  
  2.  
  3. class CTurno  
  4. {
  5.   //metodos
  6. public:
  7.   CTurno();
  8.   virtual ~CTurno();
  9.   CTurno(int tA,int nT);
  10.  
  11.   CTurno operator++();
  12.  
  13.   // atributos
  14. public:
  15.   int turnoActual;
  16.   int numTurnos;
  17.  
  18. };
  19.  
  20.  
  21.  


// fichero .cpp

Código: Text
  1.  
  2.  
  3. CTurno::CTurno()
  4. {
  5.  
  6. }
  7.  
  8. CTurno::~CTurno()
  9. {
  10.  
  11. }
  12.  
  13. CTurno::CTurno(int tA,int nT)
  14. {
  15.   turnoActual=tA;
  16.   numTurnos=nT;
  17. }
  18.  
  19. CTurno CTurno::operator ++()
  20. {
  21.   turnoActual++;
  22.   if(turnoActual>numTurnos)turnoActual=0;
  23.   return *this;
  24. }
  25.  
  26.  
  27.  

el codigo compila bien

hago una instancia de CTurno

CTurno *turno;
turno=newCTurno(0,2);

y utilizo botones de la toolbox para ver si cambia bien de turnos

// en el primero pongo

turno++;
if (turno->turnoActual==1)MessageBox("hola");  // el hola es apra ver si llega a 1

// en el otro pongo el siguiente codigo para ver el valor actual del turno

int ver;
CString ca;
ver=turno->turnoActual;
ca.Format("%i",ver);
MessageBox(ca);

pues bien, obtengo los siguientes valores  en sucesivas llamadas al primer comando que incrementa el turnoActual

0  :)  // antes de pulsar, va bien

-572662307  :o   // primer incremento

81  <_<  // segundo incremento

4335844  :blink:  // tercer  incremento

1 ¡¡¡¡¡  :kicking:  // y salta el MessageBox xD xD xD


bueno , despues de este rollo, a ver si alguien me puede echar una manita que esto me ha dejado noqueado  :(  gracias :hola:

Electroduende

  • Miembro activo
  • **
  • Mensajes: 30
    • Ver Perfil
Re: Sobrecarca Operador ++
« Respuesta #1 en: Jueves 5 de Agosto de 2004, 14:21 »
0
hola  :hola:

lo primero es que al declarar las funciones de sobrecarga debes de hacerlo asi (observa en la funcion de postincremento que hay un parametro entero):

 
Código: Text
  1.  
  2. CTurno &operator++(); // para el preincremento
  3. CTurno operator++(int); // para el postincremento
  4.  
  5.  

en cuanto a la implementacion:

Código: Text
  1.  
  2. CTurno  CTurno::operator++(int)
  3. {
  4. CTurno temp = *this;
  5. realizarIncremento();
  6. return temp;
  7. }
  8.  
  9.  

espero que te haya servido de algo
hasta luego  :hola:
Electroduende
 :alien: