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.
Categorías:Informática, Programación
año bisiesto, c++, clase, fecha, Programación

Creo que tu clase tiene un error: El año 0 no existe, se pasa directamente de 1 a. de C. a 1 d. de C., y tu función esCorrecta no lo contempla.
Cierto #1, editado
hola quisiera que me ayudaran con tres programas me urge porfa son con clases uno es como el triangulo de pascal pero con clases que sea asi 1234… consecutivo el triangulo y otro es de la formula n!/m!-n!(m-n)!porfa urge
estaba buscando informacion sobre este tipo de programas y la verdad esto me ayudo mucho sigan adelante
lo maximo gracias!
Hola, muchas gracias por compartir tus conocimientos con el mundo, me será de gran utilidad hermano…! Dios le premie en salud para usted y sus seres mas queridos…!
Estoy haciendo la siguiente clase Fecha,
La escuela de computación debe llevar a cabo un registro de ingreso de sus alumnos al laboratorio de programación por fecha, de tal manera que el estudiante inicialice la fecha de entrada y muestre en pantalla la fecha.
Define la clase Fecha, de acuerdo con las siguientes especificaciones:
Atributos:
• día
• mes
• año
Constructores:
• que inicialice con una fecha fija que tu definas
• que reciba como parámetro los valores para inicializar la fecha
Métodos públicos:
• que permita modificar el valor de la fecha
• que muestre en la pantalla la fecha usando el formato día / mes / año
• que muestre en la pantalla la fecha poniendo el mes con palabras
• que permita verificar si una fecha es válida; este método debe ser utilizado por el constructor y el método que modifica el
valor de la fecha, si el usuario trata de inicializar con una fecha inválida se inicializará con el valor fijo que tu hayas definido.
Realiza después una aplicación para probar tu clase, debe al menos crear 2 objetos de tipo Fecha, utilizando cada uno de los constructores y después mostrar las fechas correspondientes en la pantalla, además utilice los destructores para cada método.
Hasta pronto…!