Puedes usar otro flag de estado como el que tienes en 'registrar()', pero este será privado y ademas será el valor de retorno de la funcion 'estado()' (que puedes modificar el tipo para que retorne bool en vez de entero)
En la clase añades el flag privado:
Seguramente se iniciará el flag a 0, pero si quieres asegurarte añades el constructor de la clase y reinicias manualmente a 0:
Código C++:
Ver originalEmpleado::Empleado() {
flag_session_status = 0;
}
Luego en el metodo 'iniciar_sesion()' si se consiguió iniciar la sesion asignas 1 al flag de estado, o en caso de error restauras a 0; y lo mismo para finalizar la sesion.
Finalmente modificas el metodo estado para que te retorne el flag de estado que será un indicador de la sesion:
Código C++:
Ver originalbool Empleado::estado() {
return flag_session_status;
}
Y para que quede redondo puedes añadir un entero a modo de ultimo error, de forma que si durante el inicio de sesion falla el nombre de usuario asignas (por ejemplo) 1 al ultimo error, si falla la contraseña asignas 2, si falla el acceso a la base de datos asignas 3; de esta forma ante cualquier error reseteas el flag de estado de la sesion a 0 y determinas un numero de error, luego en el main si el metodo 'estado()' te retorna 0 (es decir si no pudo iniciar la sesion) llamas al metodo 'get_last_error()' y recibes el numero de error, de forma que sabes lo que falló; junto con esto declaras una lista de errores posibles y una lista de descripciones textuales del error y asi compactas el manejo de errores:
Código C++:
Ver originalenum SESSION_ERROR_INDEX {
ERROR_SUCCESS,
ERROR_MISSINGNAME,
ERROR_WRONGNAME,
ERROR_COUNT
};
static char *SESSION_ERROR_MESSAGES[ERROR_COUNT] = {
"No error",
"Missing name",
"User name does not exist"
};
bool Empleado::iniciar_sesion(char *name) {
//comprueba que recibe un nombre
if(!name
|| strlen(name
) <= 0) { flag_session_status = 0;
last_error = ERROR_MISSINGNAME;
return flag_session_status;
}
//evalua el nombre contra la base de datos
flag_session_status = 0;
last_error = ERROR_WRONGNAME;
return flag_session_status;
}
//inicio correcto
flag_session_status = 1;
last_error = ERROR_SUCCESS;
return flag_session_status;
}
bool Empleado::estado() {
return flag_session_status;
}
int Empleado::get_last_error() {
return last_error;
}
char *Empleado::get_last_error_message() {
return SESSION_ERROR_MESSAGES[last_error];
}
Ahora el estado del inicio lo puedes comprobar directamente desde el metodo 'iniciar_sesion()' , y puedes dejar el metodo 'estado()' para siguientes comprovaciones:
Código C++:
Ver originalif(e.iniciar_sesion("qwe")) {
printf("%s", get_last_error_message
()); }
*Nota: normalmente se usa el 0 como ejecucion sin error y >0 como indice de error.
Es solo una idea de implementacion para la clase, hay mas formas de hacerlo.
Saludos
vosk