There's no particular reason that the Add function has to return a Cents object. It could just as well have returned an int. However, the way it is used later in the program requires that it return a Cents object.

The reason the Add function passes by reference is probably to avoid the overhead of having to create three temporary Cents objects. The way it is implemented now it only needs to recreate one. I personally would have declared it such that it like this:

Code:
Cents Add(const Cents &objectOne, const Cents &objectTwo)
{
.....
}
The reason is that the Add function does not need to modify the objects, but it wants a reference. The const keyword promises us that it will never modify our objects.