Thinking in C++ 2nd Edition by Bruce Eckel