Thinking in C++, 2nd Edition, Volume 1 : Bruce Eckel