Source of time4.cpp


  1: // Filename: TIME4.CPP
  2: // Purpose:  Implementation file corresponding to TIME4.H.
  3: //           This version adds three overloaded operators and default
  4: //           parameters in order to combine constructor definitions.

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

  9: #include "TIME4.H"


 12: // Private data members of the Time class:
 13: //     int hours;
 14: //     int minutes;
 15: //     int seconds;


 18: // This is a "four-in-one" constructor, which may take zero, one,
 19: // two, or three parameters.
 20: //******************************************************************
 21: Time::Time(/* in */ int hoursInitial,
 22:            /* in */ int minutesInitial,
 23:            /* in */ int secondsInitial)
 24: // Constructor
 25: // Pre:  0 <= hoursInitial   <= 23  and
 26: ///      0 <= minutesInitial <= 59  and
 27: //       0 <= secondsInitial <= 59
 28: // Post: Class object is constructed
 29: //       and the time is set according to the incoming parameters.
 30: {
 31:     hours = hoursInitial;
 32:     minutes = minutesInitial;
 33:     seconds = secondsInitial;
 34: }


 37: // The following five "interface functions" are exactly the same as
 38: // the corresponding ones in TIME3.CPP.  For brevity we have omitted
 39: // comments and pre/post-conditions, which are also the same, as are
 40: // the function implementations.


 43: //******************************************************************
 44: void Time::Set(int hoursNew, int minutesNew, int secondsNew)
 45: {
 46:     hours = hoursNew;
 47:     minutes = minutesNew;
 48:     seconds = secondsNew;
 49: }


 52: //******************************************************************
 53: void Time::Increment()
 54: {
 55:     seconds++;
 56:     if (seconds > 59)
 57:     {
 58:         seconds = 0;
 59:         minutes++;
 60:         if (minutes > 59)
 61:         {
 62:             minutes = 0;
 63:             hours++;
 64:             if (hours > 23)
 65:                 hours = 0;
 66:         }
 67:     }
 68: }

 70: //******************************************************************
 71: int Time::Hours()   const { return hours; }
 72: int Time::Minutes() const { return minutes; }
 73: int Time::Seconds() const { return seconds; }



 77: // The following functions are the definitions of the four overloaded
 78: //  operators supplied by this implementation of the Time class.

 80: //******************************************************************
 81: Time Time::operator+(/* in */ const Time& otherTime) const
 82: // Pre:  self and otherTime have been initialized.
 83: // Post: Value returned is equivalent to self advanced by otherTime.
 84: {
 85:     int hrs;
 86:     int mins;
 87:     int secs;

 89:     Time t;

 91:     secs = seconds + otherTime.seconds;
 92:     t.seconds = secs % 60;
 93:     mins = minutes + otherTime.minutes + secs / 60;
 94:     t.minutes = mins % 60;
 95:     hrs = hours + otherTime.hours + mins / 60;
 96:     t.hours = hrs % 24;

 98:     return t;
 99: }



103: //******************************************************************
104: bool Time::operator==(/* in */ const Time& otherTime) const
105: // Pre:  none
106: // Post: Returns true if self equals otherTime and false otherwise.
107: {
108:     return (hours == otherTime.hours      &&
109:             minutes == otherTime.minutes  &&
110:             seconds == otherTime.seconds);
111: }


114: //******************************************************************
115: istream& operator>>(/* inout */ istream& inputStream,
116:                     /* out */   Time& t)
117: // Pre:  The input stream inputStream is open.
118: //       Time values in the input stream have the form HH:MM:SS.
119: // Post: Time t has been read in.
120: //       inputStream is still open.
121: {
122:     char ch;

124:     inputStream >> t.hours   >> ch
125:                 >> t.minutes >> ch
126:                 >> t.seconds;

128:     return inputStream;
129: }


132: //******************************************************************
133: ostream& operator<<(/* inout */ ostream& outputStream,
134:                     /* in */    const Time& t)
135: // Pre:  The output stream outputStream is open.
136: // Post: Time t has been output in the form HH:MM:SS.
137: //       outputStream is still open.
138: {
139:     if (t.hours < 10)
140:         outputStream << '0';
141:     outputStream << t.hours << ':';
142:     if (t.minutes < 10)
143:         outputStream << '0';
144:     outputStream << t.minutes << ':';
145:     if (t.seconds < 10)
146:         outputStream << '0';
147:     outputStream << t.seconds;

149:     return outputStream;
150: }