Source of rem4.cpp


  1: // Filename: REM4.CPP
  2: // Purpose:  Implementation file corresponding to REM4.H.

  4: #include <iostream>
  5: #include <cstring>
  6: using namespace std;

  8: #include "REM4.H"
  9: #include "PAUSE.H"

 11: // Private members of class:
 12: //     int   date;
 13: //     char* messagePtr;

 15: //******************************************************************
 16: Reminder::Reminder(/* in */ int date,
 17:                    /* in */ const char* messageString)
 18: {
 19:     this->date = date;
 20:     messagePtr = new char[strlen(messageString) + 1];
 21:     strcpy(messagePtr, messageString);
 22:     // cout << "Now in constructor for class Reminder (version 4) ... \n";
 23:     // Pause(0);  cout << endl;
 24: }


 27: //******************************************************************
 28: Reminder::Reminder(const Reminder& otherReminder)
 29: // Copy constructor
 30: // Pre:  otherReminder has been initialized.
 31: // Post: A new class object is constructed with its date and
 32: //       message string the same as otherReminder's.
 33: //       Note:
 34: //       This constructor is implicitly invoked whenever:
 35: //       - A Reminder object is passed by value, or
 36: //       - A Reminder object is returned as a function value, or
 37: //       - A Reminder object is initialized by another Reminder object
 38: //         in a declaration
 39: {
 40:     date = otherReminder.date;
 41:     messagePtr = new char[strlen(otherReminder.messagePtr) + 1];
 42:     strcpy(messagePtr, otherReminder.messagePtr);
 43:     // cout << "Now in copy constructor for Reminder ..." << endl;
 44:     // Pause(0);
 45: }


 48: //******************************************************************
 49: Reminder& Reminder::operator=(const Reminder& rightSide)
 50: {
 51:     date = rightSide.date;
 52:     int newLength = strlen(rightSide.messagePtr);
 53:     if (newLength > strlen(messagePtr))
 54:     {
 55:         delete [] messagePtr;
 56:         messagePtr = new char[newLength+1];
 57:     }
 58:     strcpy(messagePtr, rightSide.messagePtr);
 59:     // cout << "Now in overloaded = operator for Reminder ..." << endl;
 60:     // Pause(0);
 61:     return *this;
 62: }


 65: //******************************************************************
 66: Reminder::~Reminder()
 67: {
 68:     delete [] messagePtr;
 69:     // cout << "Now in the destructor for class Reminder (version 4) ... \n";
 70:     // Pause(0);  cout << endl;
 71: }


 74: //******************************************************************
 75: void Reminder::Display() const
 76: {
 77:     static char* monthString[12] =
 78:     {
 79:         "January",   "February", "March",    "April",
 80:         "May",       "June",     "July",     "August",
 81:         "September", "October",  "November", "December"
 82:     };

 84:     int year  = date/10000;
 85:     int month = date%10000 / 100;
 86:     int day   = date%10000 % 100;
 87:     cout << monthString[month-1] << ' ' << day << ", " << year << endl
 88:          << messagePtr << endl;
 89: }


 92: //******************************************************************
 93: void Reminder::MutilateMessageString()
 94: {
 95:     for (int i = 0; i < strlen(messagePtr); i++)
 96:         if (i % 2 == 0) messagePtr[i] = 'X';
 97: }