CONTENTS
Part I: Introduction to Professional C++
Chapter 1: A Crash Course in C++
C++ as an Object-Oriented Language
Chapter 2: Designing Professional C++ Programs
The Importance of Programming Design
What’s Different about C++ Design?
Designing with Patterns and Techniques
Chapter 3: Designing with Objects
The Object-Oriented Philosophy
Chapter 4: Designing for Reuse
The Importance of Looking Good
Using Language Features with Style
Part II: C++ Coding the Professional Way
Chapter 6: Gaining Proficiency With Classes and Objects
Introducing the Spreadsheet Example
Chapter 7: Mastering Classes and Objects
Dynamic Memory Allocation in Objects
Different Kinds of Data Members
Enumerated Types Inside Classes
Chapter 8: Discovering Inheritance Techniques
Building Classes with Inheritance
Interesting and Obscure Inheritance Issues
Chapter 9: Understanding C++ Quirks and Oddities
Chapter 11: Delving into the Standard Library
Overview of the C++ Standard Library
Chapter 12: Understanding Containers and Iterators
Unordered Associative Containers/Hash Tables
Chapter 13: Mastering STL Algorithms
Algorithms Example: Auditing Voter Registrations
Chapter 14: Using Strings and Regular Expressions
Chapter 15: Demystifying C++ I/O
Chapter 16: Additional Library Utilities
Chapter 17: Customizing and Extending the STL
Part III: Mastering Advanced Features of C++
Chapter 18: Overloading C++ Operators
Overview of Operator Overloading
Overloading the Arithmetic Operators
Overloading the Bitwise and Binary Logical Operators
Overloading the Insertion and Extraction Operators
Overloading the Subscripting Operator
Overloading the Function Call Operator
Overloading the Dereferencing Operators
Overloading the Memory Allocation and Deallocation Operators
Chapter 19: Writing Generic Code with Templates
Chapter 20: Advanced Templates
More about Template Parameters
Template Class Partial Specialization
Emulating Function Partial Specialization with Overloading
Chapter 21: Effective Memory Management
Chapter 22: Multithreaded Programming with C++
Example: Multithreaded Logger Class
Threading Design and Best Practices
Part IV: C++ Software Engineering
Chapter 23: Maximizing Software Engineering Methods
Software Engineering Methodologies
Building Your Own Process and Methodology
Chapter 24: Writing Efficient C++
Overview of Performance and Efficiency
Chapter 25: Developing Cross-Platform and Cross-Language Applications
Chapter 26: Becoming Adept at Testing
Chapter 27: Conquering Debugging
The Fundamental Law of Debugging
Chapter 28: Incorporating Design Techniques and Frameworks
“I Can Never Remember How to . . .”
Chapter 29: Applying Design Patterns
The Chain of Responsibility Pattern
Appendix B: Annotated Bibliography