Source of time5.cpp


  1: // TIME5.CPP
  2: // Implementation file for a simple TimeType class.
  3: // This version also includes two constructors, "accessor functions",
  4: // "friend functions" and "overloaded operators".

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

  9: #include "TIME5.H"

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


 17: //******************************************************************
 18: TimeType::TimeType(/* in */ int initialHours,
 19:                    /* in */ int initialMinutes,
 20:                    /* in */ int initialSeconds)
 21: // Constructor
 22: // Pre:  0 <= initialHours   <= 23  and
 23: ///      0 <= initialMinutes <= 59  and
 24: //       0 <= initialSeconds <= 59
 25: // Post: Class object is constructed
 26: //       and the time is set according to the incoming parameters.
 27: {
 28:     hours = initialHours;
 29:     minutes = initialMinutes;
 30:     seconds = initialSeconds;
 31: }


 34: //******************************************************************
 35: void TimeType::Set(/* in */ int newHours,
 36:                    /* in */ int newMinutes,
 37:                    /* in */ int newSeconds)
 38: // Pre:  0 <= newHours <= 23
 39: //       0 <= newMinutes <= 59
 40: //       0 <= newSeconds <= 59
 41: // Post: Time is set according to the incoming parameters.
 42: {
 43:     hours = newHours;
 44:     minutes = newMinutes;
 45:     seconds = newSeconds;
 46: }


 49: //******************************************************************
 50: void TimeType::Increment()
 51: // Pre:  none
 52: // Post: Time has been advanced by one second, with
 53: //       23:59:59 wrapping around to 0:0:0.
 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: }


 71: //******************************************************************
 72: int TimeType::Hours() const
 73: // Pre:  none
 74: // Post: Value of data member "hours" is returned.
 75: {
 76:     return hours;
 77: }


 80: //******************************************************************
 81: int TimeType::Minutes() const
 82: // Pre:  none
 83: // Post: Value of data member "minutes" is returned.
 84: {
 85:     return minutes;
 86: }


 89: //******************************************************************
 90: int TimeType::Seconds() const
 91: // Pre:  none
 92: // Post: Value of data member "seconds" is returned.
 93: {
 94:     return seconds;
 95: }



 99: //******************************************************************
100: TimeType TimeType::operator+(/* in */ const TimeType& otherTime) const
101: // Pre:  self and otherTime have been initialized.
102: // Post: Value returned is equivalent self advanced by "otherTime".
103: {
104:     int hrs;
105:     int mins;
106:     int secs;

108:     TimeType t;

110:     secs = seconds + otherTime.seconds;
111:     t.seconds = secs % 60;
112:     mins = minutes + otherTime.minutes + secs / 60;
113:     t.minutes = mins % 60;
114:     hrs = hours + otherTime.hours + mins / 60;
115:     t.hours = hrs % 24;

117:     return t;
118: }


121: //******************************************************************
122: bool TimeType::operator==(/* in */ const TimeType& otherTime) const
123: // Pre:  none
124: // Post: Function value returned is
125: //       - true, if this time equals otherTime
126: //       - false, otherwise
127: {
128:     return (hours == otherTime.hours      &&
129:             minutes == otherTime.minutes  &&
130:             seconds == otherTime.seconds);
131: }


134: //******************************************************************
135: bool TimeType::operator<(/* in */ const TimeType& otherTime) const
136: // Pre:  This time and otherTime represent times in the same day.
137: // Post: Function value returned is
138: //       - true, if this time is earlier in the day than otherTime
139: //       - false, otherwise
140: {
141:     return ( (hours < otherTime.hours)
142:                        ||
143:              (hours   == otherTime.hours      &&
144:               minutes <  otherTime.minutes)
145:                        ||
146:              (hours   == otherTime.hours      &&
147:               minutes == otherTime.minutes    &&
148:               seconds <  otherTime.seconds) );
149: }


152: //******************************************************************
153: ostream& operator<<(/* in */ ostream& outputStream,
154:                     /* in */ const TimeType& t)
155: // Pre:  none
156: // Post: Time t has been output in the form HH:MM:SS.
157: {
158:     if (t.hours < 10)
159:         outputStream << '0';
160:     outputStream << t.hours << ':';
161:     if (t.minutes < 10)
162:         outputStream << '0';
163:     outputStream << t.minutes << ':';
164:     if (t.seconds < 10)
165:         outputStream << '0';
166:     outputStream << t.seconds;

168:     return outputStream;
169: }