>Pass a reference to an ostream instead (can use a default value however)
Actually, it's better not to print anything at all inside of the class implementation except in a few special cases:

1) Debugging statements (that are turned off with a compile switch for production release)
2) Member functions whose sole purpose is to print something.

Other than that, return values, status flags and exceptions should be preferred for notification purposes. The application knows what messages to print and how to print them if necessary, the object usually does not.