Thinking in Cpp