Inoltre tutti quegli switch possono essere ottimizzati:
codice:
// calcola il numero del giorno dal 1/1
int GIORNO::calcola_giorno_anno(int giorno,int mese,int anno)
{
    const static int giorniMese[]={31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    int n=0;
    if (mese<1 || mese>12)
    {
        // argomento non valido, gestisci l'errore
        // (puoi ad esempio sollevare un'eccezione std::out_of_range o restituire un valore negativo)
    }
    mese-=2;
    for (;mese>=0;mese--)
    {
        n+=giorniMese[mese];
        if (mese==1 && anno%4==0 && (anno%100!=0 || anno%400==0))
            n++;
    }
    return n+giorno;
}


// calcola il giorno della settimana in base ai valori di giorno, mese e anno
// è valido solo dalla riforma gregoriana in avanti! per il calendario giuliano c'è un'altra formula più semplice
int GIORNO::calcola_giorno_set(int giorno,int mese,int anno)
{
    return ((anno+(anno-1)/4-(anno-1)/100+(anno-1)/400+calcola_giorno_anno(giorno, mese, anno))-2)%7+1;
}