The last time I used C++ seriously was in 2009. I know that the language has evolved and changed quite a bit since then, so I'm not sure how relevant this book has remained. However, this book gave me both a deep understanding of the language as well as a great overview of OOP priniciples.
Even if you don't program in Java, in my opinion this is the best book to learn design patterns from.
I've been reading this book off and on for almost a year now and I'm still not done with it. However, I've found this book extremely enlightening and fun to read (if you're into this kind of thing).
I loved how the first few chapters describe how databases and other systems efficiently store data on disk. The middle chapters got a little boring and I ended up skimming them. But now we're in Hadoop territory and I'm really enjoying the book again!
This book should be owned by every software developer. I don't think I've ever read it end-to-end, but it covers all the major data structures and algorithms that a developer should understand.
If you're planning to apply to any major software company, this is the book to help you prepare for those coding interviews.