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