In this second edition of Professional C++, Marc Gregoire has taken an excellent text and updated it to cover the new C++ standard, C++11. Fortunately, most of the original edition remains intact, with some chapters reordered, numerous typos corrected, and new insights and examples added, especially related to C++11, for a total of about 200 additional pages.
This is a very readable and helpful guide to C++ OOP. It is meant to be a programming guide rather than merely covering syntax (as C++ Primer does for example). As the original edition back cover said, "You'll learn simple, powerful techniques used by C++ professionals, little-known features that will make your life easier, and reusable coding patterns that will bring your basic C++ skills to the professional level."
Coming into this with extensive C and other programming experience, including some C++ many years ago, this book was ideal for me. I especially appreciated the authors' ability to give a very good foundation for developing well-designed, robust C++ code. I went from a very solid C programmer to developing using a new C++ mentality in a couple of weeks.
The authors are obviously quite experienced and knowledgeable in C++ and OOP, and write in an enjoyable, easy-to-follow manner. They don't just present C++, they discuss every aspect of how to develop great code using C++. They take a very reasonable and competent approach to coding, pointing out pitfalls and providing much guidance together with good explanations of their reasoning. This book doesn't just tell you how you can do something in C++, it explains how to do it well.
Professional C++ is for an intermediate to advanced programmer with either some C++ experience or a good deal of other programming experience. It is not meant to be an exhaustive exposition of C++ (although it does cover all the basics of the language), but it is certainly sufficient to get a developer not only up and coding, but doing so with better style and more competence than many seasoned C++ professionals.
Some of the many new C++ features covered in this new edition include auto variables, range-based for loops, std::array, strongly-typed enumerations, hash tables, shared_ptr/unique_ptr, lambda expressions, defaulted functions, uniform initialization, nullptr, random number engines, delegating constructors, object alignment, move constructors, and built-in concurrency. Mr. Gregoire has also added considerable new material not directly related to C++11 such as sections on Agile/Scrum and source code control in the software engineering chapter, and a discussion of the Iterator design pattern.
The physical quality of this edition is improved, with whiter, high quality paper vs. the old newspaper-like pages. The new fonts are more sleek and modern, echoing many other programming texts, although I find it less inviting to read. This edition loses the grey background for all new code, making it harder to distinguish code from text as I flip through; instead, important tips are highlighted in grey to ensure the reader takes note. The code examples are shortened and less complete in themselves, but there are code improvements and references under each code block to the corresponding file on the website with the full code example.
Some of the many topics I found interesting and useful include: code reuse, software engineering methods (including a several page synopsis of extreme programming), exceptions, STL, frameworks, multithreading, and design patterns. On some important topics that could be books in themselves, enough material is presented here to give the reader a basic understanding of the subject and an awareness of the issues so that the reader can decide whether to pursue the subject further.
Finally, there is an excellent section on preparing for a C++ interview. It covers all the common C++ interview questions and will help you impress with your knowledge of the language. It also serves as an excellent quick review of the book and important language features.
Although this book was all I really needed to get up and going, I found several other books also quite helpful. C++ in a Nutshell is a very complete reference for experienced C++ programmers, and the new third edition of Effective C++ by Scott Meyers will give you a deeper understanding of the subtleties of C++. Of course, The C++ Programming Language, 4th Edition by the inventor of C++ is a must-have for any serious C++ programmer. Finally, Object-Oriented Design Heuristics by Arthur J. Riel is a classic on OOP.