CONTENTS

Part I: Introduction to Professional C++

Chapter 1: A Crash Course in C++

The Basics of C++

Diving Deeper into C++

C++ as an Object-Oriented Language

The Standard Library

Your First Useful C++ Program

Summary

Chapter 2: Designing Professional C++ Programs

What Is Programming Design?

The Importance of Programming Design

What’s Different about C++ Design?

Two Rules for C++ Design

Reusing Code

Designing with Patterns and Techniques

Designing a Chess Program

Summary

Chapter 3: Designing with Objects

Am I Thinking Procedurally?

The Object-Oriented Philosophy

Living in a World of Objects

Object Relationships

Abstraction

Summary

Chapter 4: Designing for Reuse

The Reuse Philosophy

How to Design Reusable Code

Summary

Chapter 5: Coding with Style

The Importance of Looking Good

Documenting Your Code

Decomposition

Naming

Using Language Features with Style

Formatting

Stylistic Challenges

Summary

Part II: C++ Coding the Professional Way

Chapter 6: Gaining Proficiency With Classes and Objects

Introducing the Spreadsheet Example

Writing Classes

Object Life Cycles

Summary

Chapter 7: Mastering Classes and Objects

Dynamic Memory Allocation in Objects

Different Kinds of Data Members

More about Methods

Nested Classes

Enumerated Types Inside Classes

Friends

Operator Overloading

Building Stable Interfaces

Summary

Chapter 8: Discovering Inheritance Techniques

Building Classes with Inheritance

Inheritance for Reuse

Respect Your Parents

Inheritance for Polymorphism

Multiple Inheritance

Interesting and Obscure Inheritance Issues

Summary

Chapter 9: Understanding C++ Quirks and Oddities

References

Keyword Confusion

Types and Casts

Scope Resolution

C++11

Header Files

C Utilities

Summary

Chapter 10: Handling Errors

Errors and Exceptions

Exception Mechanics

Exceptions and Polymorphism

Stack Unwinding and Cleanup

Common Error-Handling Issues

Putting It All Together

Summary

Chapter 11: Delving into the Standard Library

Coding Principles

Overview of the C++ Standard Library

Summary

Chapter 12: Understanding Containers and Iterators

Containers Overview

Sequential Containers

Container Adapters

Associative Containers

Unordered Associative Containers/Hash Tables

Other Containers

Summary

Chapter 13: Mastering STL Algorithms

Overview of Algorithms

Lambda Expressions

Function Objects

Algorithm Details

Algorithms Example: Auditing Voter Registrations

Summary

Chapter 14: Using Strings and Regular Expressions

Dynamic Strings

Localization

Regular Expressions

Summary

Chapter 15: Demystifying C++ I/O

Using Streams

String Streams

File Streams

Bidirectional I/O

Summary

Chapter 16: Additional Library Utilities

std::function

Ratios

The Chrono Library

Random Number Generation

Tuples

Summary

Chapter 17: Customizing and Extending the STL

Allocators

Iterator Adapters

Extending the STL

Summary

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

Writing Conversion Operators

Overloading the Memory Allocation and Deallocation Operators

Summary

Chapter 19: Writing Generic Code with Templates

Overview of Templates

Class Templates

Function Templates

Summary

Chapter 20: Advanced Templates

More about Template Parameters

Template Class Partial Specialization

Emulating Function Partial Specialization with Overloading

Template Recursion

Type Inference

Variadic Templates

Metaprogramming

Summary

Chapter 21: Effective Memory Management

Working with Dynamic Memory

Array-Pointer Duality

Low-Level Memory Operations

Smart Pointers

Common Memory Pitfalls

Summary

Chapter 22: Multithreaded Programming with C++

Introduction

Atomic Operations Library

Threads

Mutual Exclusion

Condition Variables

Futures

Example: Multithreaded Logger Class

Thread Pools

Threading Design and Best Practices

Summary

Part IV: C++ Software Engineering

Chapter 23: Maximizing Software Engineering Methods

The Need for Process

Software Life Cycle Models

Software Engineering Methodologies

Building Your Own Process and Methodology

Source Code Control

Summary

Chapter 24: Writing Efficient C++

Overview of Performance and Efficiency

Language-Level Efficiency

Design-Level Efficiency

Profiling

Summary

Chapter 25: Developing Cross-Platform and Cross-Language Applications

Cross-Platform Development

Cross-Language Development

Summary

Chapter 26: Becoming Adept at Testing

Quality Control

Unit Testing

Higher-Level Testing

Tips for Successful Testing

Summary

Chapter 27: Conquering Debugging

The Fundamental Law of Debugging

Bug Taxonomies

Avoiding Bugs

Planning for Bugs

Debugging Techniques

Summary

Chapter 28: Incorporating Design Techniques and Frameworks

“I Can Never Remember How to . . .”

There Must Be a Better Way

Object-Oriented Frameworks

Summary

Chapter 29: Applying Design Patterns

The Iterator Pattern

The Singleton Pattern

The Factory Pattern

The Proxy Pattern

The Adapter Pattern

The Decorator Pattern

The Chain of Responsibility Pattern

The Observer Pattern

Summary

Appendix A: C++ Interviews

Appendix B: Annotated Bibliography

Appendix C: Standard Library Header Files

Introduction

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset