/////// File: Month.C /////// #include #include "Month.h" Month::Month(Date ndays, enum Day firstday) { Week w[7], wk; // maximum 6 weeks short i=0; wk = w[i] = new(short[7]); // (1) for (Day day=SUN ; day < firstday ; day=Day(day+1)) // (2) *wk++ = 0; for (Date d = 1 ; d <= ndays ; d++) // (3) { *wk++ = d; if (day == SAT) { wk = w[++i] = new(Date[7]); // (4) day=SUN; } else day = Day(day+1); } while ( day != SUN ) { *wk++ = 0; // (5) day = Day( (day+1)%7 ); } month = new(Week[i+2]); // (6) for (short j=0; j <= i; j++) month[j] = w[j]; month[i+1] = NULL; // NULL ptr terminator } void Month::display() { Week *mon = month; cout << "SUN MON TUE WED THU FRI SAT\n"; while ( *mon ) { Week wk = *mon++; for ( int d = SUN ; d <= SAT ; d++ ) { if ( wk[d] ) { cout.width(3); // (1) cout << wk[d] << ' '; // (2) } else cout << " "; } cout << endl; } } Month::~Month() { Week *mon = month; while ( *mon ) delete [] (*mon++); delete [] month; } int main() { Month m(31, Month::SUN); m.display(); // note enum in object can be accessed alternatively // cout << m.Tue << endl; return(0); }