C++ Design and Best Practices

C++ is an exquisitely rich language, packed with fascinating language features and extensive library capabilities. Learning the syntax and STL nuances is a task in itself. This course goes beyond the syntax and library to focus on C++ design principles and best practices. The course describes how to design C++ systems so that they are modular, maintainable, extensible, and pluggable. We take a detailed look at the SOLID principles and see how to apply them using modern C++ techniques. We also lift the lid on many design patterns, implementation patterns and C++ idioms and see how they remain relevant in C++ today.


What you will learn:

  • Understanding the SOLID principles and how to apply them
  • How to design for modularity, maintainability, extensibility, and pluggability
  • How to design object relationships and class relationships effectively
  • How to make use of static typing via templates and concepts
  • How to apply design patterns using modern C++ techniques
  • C++ coding best practices


Solid programming experience in C++

Course outline:

Getting Started:

  • The Importance of Software Design; The Art of Software Design; OO Modelling

Designing for Change:

  • The Single Responsibility Principle (SRP); SRP Example; The DRY Principle

Segregating Interfaces:

  • Interfaces in C++; The Interface Segregation Principle (ISP); Applying the ISP to Template Types

Designing for Extensibility:

  • The Open-Closed Principle (OCP); The OCP and Inheritance; The OCP and Template Specialization

Designing Object Relationships:

  • Setting the Scene; Association; Composition; Using Smart Pointers Appropriately

Managing Resources with RAII:

  • Overview of RAII; Real-World RAII Examples; Managing Dynamic Objects with RAII

Designing for Consistency [The Principle of Least Surprise]:

  • The Liskov Substitution Principle (LSP); The LSP and Expectation Management; Covariance and Contravariance; The LSP and Static Typing

Designing for Pluggability:

  • Defining a Pluggable Hierarchy; Managing Dependencies; Organizing Projects and Libraries

Introduction to Design Patterns:

  • Essential Concepts; Design Pattern Classification; Anti-Patterns; Design Heuristics

Creational Design Patterns:

  • Factory Method Pattern; Abstract Factory Pattern; Prototype Pattern; Builder Pattern

Structural Design Patterns:

  • Composite Pattern; Decorator Pattern; Static Polymorphism via Templates; Object Adapter / Class Adapter Patterns; Bridge Pattern

Behavioural Design Patterns:

  • State Pattern; Command Pattern; Strategy Pattern; Visitor Pattern; Implementing the Visitor Pattern via std::variant


Andy Olsen - author of the course

Andy is a freelance consultant and instructor based in the UK, working mostly in the City of London and Oxford. Andy has been working with .NET since the Beta 1 days and has extensive experience in many facets of .NET development including WCF, WPF, WF, ASP.NET MVC Web development, and mobile applications. Andy has designed and written many Microsoft Official Curriculum courses in the last decade, and has been engaged as author and technical reviewer with Apress on some of their biggest selling books.

Other relevant courses

16. September
5 days
Classroom Virtual
23. September
5 days
Classroom Virtual
30. September
5 days
Classroom Virtual
2. October
3 days
Classroom Virtual