Source of testrem3.cpp


  1: // Filename: TESTREM3.CPP
  2: // Purpose:  When used with REM3.H/REM3.CPP, shows the problems that
  3: //           arise when you have a class with dynamic data and yet you
  4: //           *don't* have an overloaded assignment operator = and/or a
  5: //           copy constructor.  When used with REM4.H/REM4.CPP, shows
  6: //           that those problems go away when you *do* have an overloaded
  7: //           assignment operator and a copy constructor.

  9: #include <iostream>
 10: using namespace std;

 12: #include "REM?.H"  // Note: ? to be replaced first by 3, then by 4
 13: #include "PAUSE.H"

 15: int main()
 16: {
 17:     cout << endl;

 19:     // Illustrates that the kind of copy made by assignment depends
 20:     // on whether the assignment operator has been overloaded.
 21:     Reminder r1_1(20000101, "First message");
 22:     Reminder r1_2;
 23:     r1_2 = r1_1; // Copy is "shallow" with REM3.*, "deep" with REM4.*.
 24:     cout << "r1_1: "; r1_1.Display();  Pause(0);
 25:     cout << "r1_2: "; r1_2.Display();  Pause(0);
 26:     r1_1.MutilateMessageString();
 27:     cout << "r1_1: "; r1_1.Display();  Pause(0);
 28:     cout << "r1_2: "; r1_2.Display();  Pause(0);
 29:     cout << endl;

 31:     // Illustrates that the kind of copy made by initialization 
 32:     // depends on whether a copy constructor has been provided.
 33:     Reminder r2_1(20000202, "Second message");
 34:     Reminder r2_2 = r2_1; // Copy is "shallow" with REM3.*, "deep" with REM4.*.
 35:     cout << "r2_1: "; r2_1.Display();  Pause(0);
 36:     cout << "r2_2: "; r2_2.Display();  Pause(0);
 37:     r2_1.MutilateMessageString();
 38:     cout << "r2_1: "; r2_1.Display();  Pause(0);
 39:     cout << "r2_2: "; r2_2.Display();  Pause(0);
 40:     cout << endl;

 42:     // Again illustrates that the kind of copy made by initialization
 43:     // depends on whether a copy constructor has been provided.
 44:     // Note the alternate form of initialization used this time around.
 45:     Reminder r3_1(20000303, "Third message");
 46:     Reminder r3_2(r3_1);  // Copy is "shallow" with REM3.*, "deep" with REM4.*.
 47:     cout << "r3_1: "; r3_1.Display();  Pause(0);
 48:     cout << "r3_2: "; r3_2.Display();  Pause(0);
 49:     r3_1.MutilateMessageString();
 50:     cout << "r3_1: "; r3_1.Display();  Pause(0);
 51:     cout << "r3_2: "; r3_2.Display();  Pause(0);
 52:     cout << endl;

 54:     return 0;
 55: }