Listing 11 Implementation for Listing 10

// date4.cpp

#include <stdio.h>
#include "date3.h"

struct DateRep
{
   DateRep(int, int, int);

private:
   friend struct Date;

   int month;
   int day;
   int year;
};

const char * Date::month_text[13] =
   {"Bad month", "January", "February",
    "March", "April", "May", "June",
    "July", "August", "September",
    "October", "November", "December"};

DateRep::DateRep(int m, int d, int y) :
   month(m), day(d), year(y)
{}

Date::Date(int m, int d, int y)
{
   drep = new DateRep(m,d,y);
}

Date::~Date()
{
   delete drep;
}

char * Date::format(char *buf) const
{
   sprintf(buf,"%s %d, %d",
          month_text[drep->month],
          drep->day,drep->year);
   return buf;
}

int Date::compare(const Date & dp2) const
{
   int result = drep->year - dp2.drep->year;
   if (result == 0)
      result = drep->month - dp2.drep->month;
   if (result == 0)
      result = drep->day - dp2.drep->day;
   return result;
}
// End of File