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: }