1: // Filename: TIME3.CPP
2: // Purpose: Implementation file corresponding to TIME3.H. This version
3: // adds three accessor functions and a friend function.
5: #include <iostream>
6: using namespace std;
8: #include "TIME3.H"
10: // Private data members of the Time class:
11: // int hours;
12: // int minutes;
13: // int seconds;
16: // The following five "interface functions" are exactly the same
17: // as those in TIME2.CPP. For brevity we have omitted the pre-
18: // and post-conditions, which are also the same. These functions
19: // are also implemented in exactly the same way as in TIME2.CPP,
20: // except for the default constructor, which should be compared
21: // with that in TIME2.CPP.
23: //******************************************************************
24: Time::Time() { hours = minutes = seconds = 0; }
27: //******************************************************************
28: Time::Time(int hoursInitial, int minutesInitial, int secondsInitial)
29: {
30: hours = hoursInitial;
31: minutes = minutesInitial;
32: seconds = secondsInitial;
33: }
36: //******************************************************************
37: void Time::Set(int hoursNew, int minutesNew, int secondsNew)
38: {
39: hours = hoursNew;
40: minutes = minutesNew;
41: seconds = secondsNew;
42: }
45: //******************************************************************
46: void Time::Increment()
47: {
48: seconds++;
49: if (seconds > 59)
50: {
51: seconds = 0;
52: minutes++;
53: if (minutes > 59)
54: {
55: minutes = 0;
56: hours++;
57: if (hours > 23)
58: hours = 0;
59: }
60: }
61: }
64: //******************************************************************
65: void Time::Display() const
66: {
67: if (hours < 10)
68: cout << '0';
69: cout << hours << ':';
70: if (minutes < 10)
71: cout << '0';
72: cout << minutes << ':';
73: if (seconds < 10)
74: cout << '0';
75: cout << seconds;
76: }
79: // The following three functions are "accessor functions" and provide
80: // read access to the private data members of the class.
82: //******************************************************************
83: int Time::Hours() const
84: // Pre: none
85: // Post: Value of data member "hours" is returned.
86: {
87: return hours;
88: }
91: //******************************************************************
92: int Time::Minutes() const
93: // Pre: none
94: // Post: Value of data member "minutes" is returned.
95: {
96: return minutes;
97: }
100: //******************************************************************
101: int Time::Seconds() const
102: // Pre: none
103: // Post: Value of data member "seconds" is returned.
104: {
105: return seconds;
106: }
110: // The following function is a member function. Note the Time::
111: // preceding the function name and note that as a member function
112: // it has direct access to the private data members.
113: bool Time::EqualTo1(const Time& otherTime) const
114: // Pre: self and otherTime have been initialized.
115: // Post: Returns true if self and otherTime are the same time
116: // and false otherwise.
117: {
118: return (hours == otherTime.hours &&
119: minutes == otherTime.minutes &&
120: seconds == otherTime.seconds);
121: }
125: // The following function is *not* a member function (note the
126: // *absence* of Time:: preceding the function name). But note
127: // that it nevertheless has direct access to the private data
128: // members of the class because it is a "friend" of the class.
129: bool EqualTo3(/* in */ const Time& t1,
130: /* in */ const Time& t2)
131: // Pre: "t1" and "t2" have been initialized.
132: // Post: Returns true if t1 and t2 are the same time
133: // and false otherwise.
134: {
135: return (t1.hours == t2.hours &&
136: t1.minutes == t2.minutes &&
137: t1.seconds == t2.seconds);
138: }