cout has nifty type-checking. and you can define it for use with new objects you create, like string objects. anything you can do with printf can be done with cout using manipulators.