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