Navigation and service

Training course "Advanced C++ with Focus on Software Engineering"

06 Jun 2017 09:00
09 Jun 2017 16:30
Jülich Supercomputing Centre, Rotunda, building 16.4, room 301
Target audience:
Scientists who want to use C++ efficiently

This advanced C++ training is a course on object-oriented (OO) software design with the C++ programming language. The focus of the training are the essential OO and C++ software development principles, concepts, idioms, and best practices, which enable programmers to create professional, high-quality code. Additionally, the course gives insight into kernel development with C++. The course will not address special areas and applications of C++, such as for instance Template Meta Programming (TMP), or the quirks and curiosities of the C++ language. It rather teaches guidelines to develop mature, robust, maintainable, and efficient C++ code.

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 properly design classes and class interfaces
  • know about the importance of exception safe programming
  • have gained insight into kernel development with C++
  • avoid the usual pitfalls in the context of inheritance
  • comprehend the advantages of non-intrusive design
  • understand the virtue of clean code


1st day schedule (9:00 - 17:30)

  • Essential Object-Oriented Design Principles

    • The core of object-oriented programming
    • The SOLID principles
  • Concepts and the STL

    • Overview of the STL
    • Proper use of the STL

2nd day schedule (9:00 - 17:30)

  • Class Design

    • Proper Handling of Member Data
    • Proper Interface Design
    • Compiler Generated Functions
    • Move Semantics
    • Proper Design of Polymorphic Interfaces
    • Const Correctness
    • Visibility vs. Accessibility

3rd day schedule (9:00 - 17:30)

  • Robust Code

    • Error Propagation
    • Exception Safety
    • RAII
    • Handling Legacy Code
  • Proper Use of Dynamic Polymorphism

    • Non-public Inheritance
    • Public Inheritance
  • Dependency Breaking Techniques

    • Breaking Include Dependencies
    • Classical Design Patterns Revisited

4th day schedule (9:00 - 16:30)

  • Non-Intrusive Design
  • Kernel development with C++

    • Choice of the proper data structures
    • Loop unrolling
    • Blocking
    • SIMD vectorization
Course participants should have a solid base on C++ and at least one year of experience with the language is needed.
Participants are requested to bring their own notebook. The installed compiler should be at least C++ 11, or even better C++ 14 or C++ 17.
This course will be given in English.
4 days
6-9 June 2017, 9:00-17:30
Jülich Supercomputing Centre, Rotunda, building 16.4, room 301
Number of participants:
maximum 30 participants
Klaus Iglberger, Erlangen