Código fuente de una clase fecha en c++
Bueno este es mi primera publicación en el blog sobre programación. En esta ocasión publicaré una clase que me es bastante útil en muchos proyectos o prácticas, la clase Fecha.
Como se trata de una librería que utilizo bastante, he creado una librería llamada “Fecha.h” que contiene la especificación de la clase y de las funciones que utilizo en la validación de la fecha.
Fecha.h
#ifndef FECHA_H_INCLUDED
#define FECHA_H_INCLUDED
bool esCorrecta(unsigned int d, unsigned int m, int a);
bool esBisiesto (int a);
class Fecha
{
public:
Fecha(unsigned int d, unsigned int m, int a); //Constructor de la clase fecha, recibe como parámetros un día (d), un mes (m) y un año (a).
unsigned int getDia(); //Nos devuelve el día
unsigned int getMes(); //Nos devuelve el mes
int getAnho(); //Nos devuelve el año
void imprimirFecha(); //Muestra por pantalla la fecha en formato d/m/a
void cambiarFecha(unsigned int d, unsigned int m, int a); //Cambia la fecha
private:
unsigned int dia;
unsigned int mes;
int anho; //Años a.d.C.
};
#endif // FECHA_H_INCLUDED
El constructor y métodos de la clase fecha, así como las funciones de validación están implementadas en el archivo “Fecha.cpp”.
Fecha.cpp
#include <iostream>
#include "Fecha.h"
using namespace std;
Fecha::Fecha(unsigned int d, unsigned int m, int a)
{
dia = d;
mes = m;
anho = a;
}
unsigned int Fecha::getDia()
{
return dia;
}
unsigned int Fecha::getMes()
{
return mes;
}
int Fecha::getAnho()
{
return anho;
}
void Fecha::imprimirFecha()
{
cout<<"\n"<<dia<<"/"<<mes<<"/"<<anho;
}
void Fecha::cambiarFecha(unsigned int d, unsigned int m, int a)
{
if(esCorrecta(d,m,a))
{
dia = d;
mes = m;
anho = a;
}
else
{
cout<<"\nLa fecha introducida es incorrecta. Datos no modificados.";
}
}
bool esCorrecta(unsigned int d, unsigned int m, int a)
{
unsigned int arrayDiasMes[12] = {31,29,31,30,31,30,31,31,30,31,30,31};
if(a==0) return false; //Aporte de susmel en comentarios.
if(d<=0||d>31) return false;
if(m<=0||m>12) return false;
if(m==2 && d>29) return false;
if(arrayDiasMes[m-1]<d) return false;
if(m==2 && d==29 && !esBisiesto(a)) return false;
return true;
}
bool esBisiesto(int a)
{
if ((a%4==0)||(a%400==0)&&(a%100!=0)) return true;
else return false;
}
Un ejemplo de la llamada y el uso de la clase Fecha desde el main.cpp, es el siguiente:
main.cpp
#include <iostream>
#include "Fecha.h"
using namespace std;
int main()
{
unsigned int dia, mes;
int anho;
do
{
cout<<"\nIntroduzca día de nacimiento: ";
cin>>dia;
cout<<"\nIntroduzca día de nacimiento: ";
cin>>mes;
cout<<"\nIntroduzca día de nacimiento: ";
cin>>anho;
}
while(!esCorrecta(dia,mes,anho));
Fecha anhoNacimiento(dia,mes,anho);
anhoNacimiento.cambiarFecha(10,31,1984); //Intentamos cambiar la fecha a una errónea. Mostrará un mensaje de error.
cout<<"\nMostrando la fecha por pantalla con el método imprimirFecha(): ";
anhoNacimiento.imprimirFecha(); //Utilizamos la función imprimir fecha
cout<<"\nMostrando la fecha por pantalla con los métodos getDia(), getMes() y getAnho(): "<<anhoNacimiento.getDia()<<"/"<<anhoNacimiento.getMes()<<"/"<<anhoNacimiento.getAnho(); //Visualizamos la fecha de otra forma.
return 0;
}
Bueno pues esta es, más o menos, la clase Fecha que suelo utilizar. Como siempre, se aceptan correcciones o sugerencias.

Últimos comentarios