SoloCodigo
Programación General => C/C++ => Mensaje iniciado por: Diodo en Jueves 5 de Agosto de 2004, 11:29
Título:
Sobrecarca Operador ++
Publicado por:
Diodo
en
Jueves 5 de Agosto de 2004, 11:29
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
class CTurno
{
//metodos
public:
CTurno();
virtual ~CTurno();
CTurno(int tA,int nT);
CTurno operator++();
// atributos
public:
int turnoActual;
int numTurnos;
};
// fichero .cpp
Código: Text
CTurno::CTurno()
{
}
CTurno::~CTurno()
{
}
CTurno::CTurno(int tA,int nT)
{
turnoActual=tA;
numTurnos=nT;
}
CTurno CTurno::operator ++()
{
turnoActual++;
if(turnoActual>numTurnos)turnoActual=0;
return *this;
}
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:
Título:
Re: Sobrecarca Operador ++
Publicado por:
Electroduende
en
Jueves 5 de Agosto de 2004, 14:21
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
CTurno &operator++(); // para el preincremento
CTurno operator++(int); // para el postincremento
en cuanto a la implementacion:
Código: Text
CTurno CTurno::operator++(int)
{
CTurno temp = *this;
realizarIncremento();
return temp;
}
espero que te haya servido de algo
hasta luego :hola:
Electroduende
:alien: