Cita:
Iniciado por eferion Está claro que si tu clase Fecha tiene que entender que 00004 puede ser un día válido no tiene sentido limitar la entrada de sscanf a 2 caracteres.
Esta versión no te debería dar esos problemas.
Otra cosa es que esa fecha se tenga que interpretar como no válida... en cuyo caso lo que no tiene sentido es que devuelvas una excepción en el constructor de la clase Fecha. En este caso tendrías que tener un booleano interno en Fecha que indicase si la fecha almacenada es válida. Al realizar las comparaciones, si una fecha es válida y la otra no automáticamente ambas fechas van a ser diferentes. O eso o haces una sobrecarga del operador de comparación específica:
Código C++:
Ver originalclass Fecha
{
// versión 1
bool operator!=(const char* fecha) const;
// versión 2
friend bool operator!=(const Fecha& fecha1, const char* fecha2);
};
Un saludo.
Ya probé a poner sscanf(fecha, "%d/%d/%d", &iDia_, &iMes_, &iAno_), pero entonces no me pasa después el test de desbordamiento, debería ser una fecha inválida.
Mi operador de comparación es de este modo:
Código C++:
Ver originalbool operator == (const Fecha& f1, const Fecha& f2){
return ((f1.dia() == f2.dia()) && (f1.mes() == f2.mes()) && (f1.anno() == f2.anno()));
}
bool operator != (const Fecha& f1, const Fecha& f2){
return !(f1 == f2);
}
Se supone que el constructor, lo uso para almacenar los valores de la cadena en iDia, iMes, iAno
Muchas gracias por responder