Essential C++ Design [2018 class archive]

“Essential C++ Design” is a two-day training course with programming exercises taught by Klaus Iglberger. It is offered at the Meydenbauer Conference Center from 9AM to 5PM on Saturday and Sunday, September 29th and 30th, 2018 (immediately after the conference). Lunch is included.

Course Description

This training course is focused on the most important OO and C++ software design principles, idioms, and best practices, which enable programmers to create professional, high-quality code. It teaches guidelines to develop mature, robust, maintainable, and efficient C++ code. Amongst others it will answer the following questions:

  • How does good C++ design with a minimum of dependencies look like?
  • What are the most important rules for robust, maintainable, and sustainable design?
  • What are the most common pitfalls in C++ software design?
  • Why does classical C++ design based on inheritance hierarchies fail so often?
  • Which tools are available to support good C++ design?

After this course, participants will …

  • … have a detailed understanding of the essential OO design principles
  • … have gained knowledge about fundamental C++ programming concepts and idioms
  • … be able to design classes and class interfaces with minimum dependencies
  • … know about the importance of exception safe programming
  • … avoid the usual pitfalls in the context of inheritance
  • … comprehend the advantages of non-intrusive design
  • … understand the virtue of clean code

Prerequisites

Course participants should have a solid base knowledge of C++ and at least one to two years of experience with the language. Additionally, the course is interesting for you if several of the following statements apply to you:
  • You are not aware of the impact of dependencies on code quality
  • You don’t know the SOLID principles or don’t consider them for your work
  • You haven’t used the standard algorithms or believe you cannot/should not use them
  • You believe object-oriented programming is about inheritance relationships
  • You consider moving functionality into classes the preferred design choice
  • You are unaware of exception safety
  • You don’t comprehend the arcane rules when the compiler is generating the special member functions for you
  • You don’t know the details of move semantics
  • You wonder about type erasure or its value

Course Topics

Basic Object-Oriented Design Principles

  • The Core of Object-Oriented Programming
  • The SOLID Principles

Concepts and the STL

  • Concepts in C++ (The idea of generic programming)
  • The Design of the STL (And Why It Works)

Clean Class Design

  • General Aspects of Clean Class Design
  • Compiler Generated Functions
  • Member Data
  • Member Functions
  • Move Semantics
  • Virtual Member Functions
  • Const Correctness
  • constexpr
  • Visibility vs. Accessibility

Proper Use of Dynamic Polymorphism

  • Proper Use of Public Inheritance
    • Good Examples for Public Inheritance
    • Bad Examples for Public Inheritance
  • Proper Use of Non-Public Inheritance

Non-Intrusive Design (Type Erasure)

Course Instructor

Klaus Iglberger

Klaus Iglberger is a freelancing C++ trainer and consultant and is currently on the payroll of Siemens in Nuremberg, Germany. He has finished his PhD in computer science in 2010 and since then is focused on large-scale C++ software design. He shares his experience in popular advanced C++ courses around the world (mainly in Germany, but also the EU and US). Additionally, he is the initiator and lead designer of the Blaze C++ math library and the organizer of the Munich C++ user group.