Good software design is essential for the success of your project, but designing software is hard to do. You need to have a deep understanding of the consequences of design decisions and a good overview of available design alternatives. With this book, experienced C++ developers will get a thorough, practical, and unparalleled overview of software design with this modern language.

C++ trainer and consultant Klaus Iglberger explains how you can manage dependencies and abstractions, improve changeability and extensibility of software entities, and apply and implement modern design patterns to help you take advantage of today's possibilities. Design is the most essential aspect of a software project because it impacts the software's most important properties: maintainability, changeability, and extensibility.

  • Learn how to evaluate your code with respect to software design
  • Understand what software design is, including design goals such as changeability and extensibility
  • Explore the advantages and disadvantages of each design approach
  • Learn how design patterns help solve problems and express intent
  • Choose the right form of a design pattern to gain most of its advantages

Table of Contents

  1. 1. The Purpose of Design Patterns
    1. Guideline 11: Understand the Purpose of Design Patterns
    2. A Design Pattern Has a Name
    3. A Design Pattern Carries an Intent
    4. A Design Pattern Introduces an Abstraction
    5. A Design Pattern Has Been Proven
    6. Guideline 12: Beware the Misconceptions about Design Patterns
    7. Design Patterns are Not About Implementation Details
    8. Design Patterns are Neither Limited to Object-Oriented Programming nor Dynamic Polymorphism
    9. Guideline 13: Design Patterns are Everywhere
    10. Guideline 14: Consider Using the Name of a Design Pattern to Communicate Intent
  2. 2. The Visitor Design Pattern
    1. Guideline 15: Design for the Addition of Types or Operations
    2. A Procedural Solution
    3. An Object-Oriented Solution
    4. Be Aware of the Design Choice in Dynamic Polymorphism
    5. Guideline 16: Use the Visitor Design Pattern to Extend Operations
    6. Analyzing the Design Issues
    7. The Visitor Design Pattern Explained
    8. Analyzing the Shortcomings of the Visitor Design Pattern
    9. Guideline 17: Consider std::variant for Implementing the Visitor Design Pattern
    10. Introduction to std::variant
    11. Refactoring the Drawing of Shapes
    12. Performance Benchmarks
    13. Analyzing the Shortcomings of the std::variant Solution
    14. Guideline 18: Beware the Performance of Acyclic Visitors