Problem solving, abstraction, and design using C++ - Friedman, Frank L. (Addison-Wesley, 1997)