9.6. Modifiers¶
Of course, sometimes you want to modify one of the arguments. Functions that do are called modifiers.
As an example of a modifier, consider increment, which adds a given
number of seconds to a Time object. Again, a rough draft of this
function looks like:
void increment (Time& time, double secs) {
time.second += secs;
if (time.second >= 60.0) {
time.second -= 60.0;
time.minute += 1;
}
if (time.minute >= 60) {
time.minute -= 60;
time.hour += 1;
}
}
The first line performs the basic operation; the remainder deals with the special cases we saw before.
Is this function correct? What happens if the argument secs is much
greater than 60? In that case, it is not enough to subtract 60 once; we
have to keep doing it until second is below 60. We can do that by
replacing the if statements with while statements:
The active code below uses the increment function. Run the active code to
see what the output is!
The solution above is correct, but not very efficient. Can you think of a
solution that does not require iteration? Try writing a more efficient version
of increment in the commented section of the active code below. If you get stuck,
you can reveal the extra problem at the end for help.
Let’s write the code for the increment function. increment
adds a number of seconds to a Time object and updates the values
of the object.