Source of swap.cpp


  1: //swap.cpp
  2: //Illustrates function overloading and the standard
  3: //algorithm for exchanging the values of two variables.

  5: #include <iostream>
  6: #include <iomanip>
  7: using namespace std;


 10: void DescribeProgram();
 11: void Swap(int& i1, int& i2);
 12: void Swap(char& c1, char& c2);
 13: void Pause();
 14: void Pause(int indentLevel);


 17: int main()
 18: {
 19:     DescribeProgram();

 21:     //The (deliberate) naming of the following variables here in "main"
 22:     //and the naming of the formal function parameters in the function
 23:     //definitions below emphasizes that formal function parameters may
 24:     //(or may not) have the same names as the corresponding actual
 25:     //parameters in subsequent parmeter calls.
 26:     int i1, i2;
 27:     char first, second;

 29:     cout << "Enter two integers: ";
 30:     cin >> i1 >> i2;  cin.ignore(80, '\n');  cout << endl;
 31:     cout << "In the order entered, the integers are: ";
 32:     cout << i1 << ", " << i2 << endl;
 33:     Pause(7);
 34:     Swap(i1, i2); //Actual/formal parameters have same names
 35:     cout << "And here are the two integers reversed: ";
 36:     cout << i1 << ", " << i2 << endl;
 37:     Pause(7);

 39:     cout << endl;

 41:     cout << "Enter two characters: ";
 42:     cin >> first >> second;  cin.ignore(80, '\n');  cout << endl;
 43:     cout << "In the order entered, the characters are: ";
 44:     cout << first << ", " << second << endl;
 45:     Pause();
 46:     cout << endl;
 47:     Swap(first, second); //Actual/formal parameters have different names
 48:     cout << "And here are the two integers reversed: ";
 49:     cout << first << ", " << second << endl;
 50:     Pause();

 52:     cout << endl;
 53: }


 56: void DescribeProgram()
 57: //Pre:  The cursor is at the left margin.
 58: //Post: The program description has been displayed,
 59: //      preceded and followed by at least one blank line.
 60: {
 61:     cout << "\nThis program illustrates the standard \"two-value "
 62:         "exchange algorithm\" and\nfunction overloading.  It is "
 63:         "necessary to study both the source code and\nthe output "
 64:         "simultaneously, but in the meantime, just follow "
 65:         "instructions.\n\n";
 66: }


 69: void Swap(/* inout */ int& i1, /* inout */ int& i2)
 70: //Pre:  "i1" and "i2" have been initialized.
 71: //Post: The values of "i1" and "i2" have been swapped.
 72: {
 73:     int temp = i1;
 74:     i1 = i2;
 75:     i2 = temp;
 76: }


 79: void Swap(/* inout */ char& c1, /* inout */ char& c2)
 80: //Pre:  "c1" and "c2" have been initialized.
 81: //Post: The values of "c1" and "c2" have been swapped.
 82: {
 83:     char temp = c1;
 84:     c1 = c2;
 85:     c2 = temp;
 86: }


 89: void Pause()
 90: //Pre:  The input stream cin is empty.
 91: //Post: The program has displayed a one-line message beginning in
 92: //      column 1 and then paused, and the user has pressed Enter.
 93: {
 94:     cout << "Press Enter to continue ... ";  cin.ignore(80, '\n');
 95: }


 98: void Pause(/* in */ int indentLevel)
 99: //Pre:  The input stream cin is empty, and 0 <= indentLevel <= 50.
100: //Post: The program has displayed a one-line message beginning in
101: //      column indentLevel+1 and then paused. The user has pressed
102: //      Enter, and a blank line has been inserted in the output stream.
103: {
104:     cout << setw(indentLevel) << "" << "Press Enter to continue ... ";
105:     cin.ignore(80, '\n');
106:     cout << endl;
107: }