Modern C++ Software Design (Advanced)

It is not yet decided whether this course will be on-site or online.

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.

Since 2020 we provide two types of C++ courses, each offered two times per year:

  • intermediate: March 8-11, 2022, and June 21-24, 2022 
  • advanced: May 3-6, 2022, and Nov. 22-25, 2022 (this course)

with two different levels of prerequisites.

Location

HLRS, University of Stuttgart
Nobelstraße 19
70569 Stuttgart, Germany
Room 0.439 / Rühle Saal
Location and nearby accommodations

Start date

Nov 22, 2022
08:30

End date

Nov 25, 2022
16:30

Language

German

Entry level

Advanced

Course subject areas

Programming Languages for Scientific Computing

Topics

C/C++

Back to list

Prerequisites and content levels

Prerequisites and Language Hints Advanced C++

At least two to three years of experience with the language is needed. This includes a solid knowledge of the syntax of C++, experience with the standard library (std::vector, std::list, …), hands-on experience with both template-based and inheritance-based designs and some experience with design patterns.

In the on-site course, participants will be provided Linux machines. For that reason some familiarity with Linux is beneficial. Alternatively, participants will be able to use their own machines. Any operating system (Windows, Linux, MacOS, ...), any IDE/editor (MS Visual Studio, CLion, vi, emacs, ...) and any compiler capable of at least C++14 (GCC, Clang, MSVC, ...) can be used. In the online course, participants are expected to use their own devices. The programming tasks, including both Makefiles and CMake files, will be distributed before the course.

The course language is German. The slides are in English.

If you want a similar course in English, then please look at the 3- or 4-day advanced C++ courses at LRZ , the 4 day course at VSC in Vienna or directly on Klaus Iglberger's course page.

Content levels
  • Basic: 3 hours
  • Intermediate: 10 hours
  • Advanced: 14 hours

Learn more about course curricula and content levels.

Instructors

Klaus Iglberger (External)

Learning outcomes

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 value-based design
  • understand the virtue of clean code

Agenda

All times are local times in the central European time zone (Berlin).

Local registration (8:30 - 9:00)

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

  • The Basic Design Principles
    • Defining a Goal
    • The SOLID Principles
  • Concepts and the STL
    • STL Allocators
    • constexpr

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

  • Advanced Templates
    • Type Traits
    • SFINAE
    • Concepts
    • CRTP
    • Forwarding References

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

  • Dynamic Polymorphism
    • The Perils of Inheritance
    • Value Semantics
    • Public Inheritance
    • Surprises in Object Hierarchies
  • Design Patterns
    • Strategy
    • Visitor
    • Type Erasure

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

  • Design of HPC Components
    • Choice of the Proper Data Structures
    • Kernel Design
    • Loop Unrolling
    • SIMD Vectorization

Handouts

Each participant will get a copy of all slides (PDF).

On-site course & COVID rules

Besides the content of the training itself, another important aspect of this event is the scientific exchange among the participants. We try to facilitate such communication by

  • offering common coffee and lunch breaks and
  • working together in groups of two during the exercises (if desired by the individual participants and permitted by the COVID-19 rules).

For your safety, we will only allow fully vaccinated or fully recovered or COVID-19 negative tested participants on all days. You must wear a medical face mask or FFP2 mask everywhere on site. If a distance of 1.5 m cannot be guaranteed inside, e.g., if you are working in pairs in exercises, it must be an FFP2 mask. Details can be found on the registration page.

We strongly recommend to choose travel options and hotels with the possibility to cancel (even close to the event) because we might be forced to deliver the course as an online course.

Registration information

Register via the button at the top of this page (will be available sooon).

Registration closes on October 25, 2022.

Fees

Students without Diploma/Master: 35 EUR.
Students with Diploma/Master (PhD students) at German universities: 75 EUR.  
Members of German universities and public research institutes: 75 EUR.
Members of universities and public research institutes within EU or PRACE member countries: 150 EUR.   
Members of other universities and public research institutes: 300 EUR.  
Others: 780 EUR.

Our course fee includes coffee breaks (in classroom courses only).

Lunch Breaks

From Monday to Thursday a nearby canteen is opened and we plan to have lunch there. Further two other near possibilities for lunch are on all days:

We will update this information if opening times etc. change and inform you more precisely before the course starts.

Contact

Andreas Ruopp phone 0711 685 87259, ruopp(at)hlrs.de
Tobias Haas phone 0711 685 87223, tobias.haas(at)hlrs.de

PRACE PATC and bwHPC

HLRS is part of the Gauss Centre for Supercomputing (GCS), which is one of the six PRACE Advanced Training Centres (PATCs) that started in Feb. 2012.

HLRS is also member of the Baden-Württemberg initiative bwHPC.

This course is also provided within the framework of the bwHPC training program. This course is not part of the PATC curriculum and is not sponsored by the PATC program.