Concepts of C++ Programming

Contents

First, the module studies the basic concepts of the C++ language (syntax, strong typing, type deduction, focus on runtime efficiency). Then, the module studies the central, modern C++ programming concepts. The goal is that participants get a solid and thorough understanding of important and modern C++ concepts.

  • Concepts for efficient resource management: The module presents RAII, smart pointers, universal references, ownership and copy/move.
  • Concepts for procedural programming: The module investigates C++ mechanisms for procedural programming, such as functions, parameter passing, lambdas, overloads, and error handling.
  • Concepts for object-oriented programming: The module presents classes, inheritance (single and multiple), polymorphy, and RTTI.
  • Concepts for generic programming: The module investigates templates, variadic templates and fold expressions, expression templates for lazy evaluation, and typical patterns such as CRTP.
  • Concepts of compile-time programming: The module investigates concepts such as template recursion, constexpr, and type traits.
  • Concepts for containers, iterators, and ranges: The module presents the STL standard containers, algorithms and runtime guarantees, iterator concepts as well as views and ranges.
  • Concepts for build systems and dependency management: concepts for automatic compilation, linking and management of dependencies are studied. Additionally, concepts for continuous testing and integration are investigated.
  • Optionally, concepts for parallel programming are investigated, such as threads, atomics and async/futures, as well as recent C++ extensions such as concepts and modules.

Organization

  • Lecture with integrated exercises:
    • Lecture with integrated exercises: Mon 14:30–17:00 (s.t.) in MW 0001
    • Exercise: Tue 14–16 (c.t.) in Interims II HS 2
  • Exercises will include hands-on programming tasks
  • Weekly homework assignments for grade bonus
  • Language: English
  • Module: formerly IN2377, new module number will be assigned soon. 6 ECTS, Bachelor/Master elective in various study programs
  • Computer-based exam under supervision (90 minutes) with programming exercises, tentatively: own laptop required.
  • Zulip stream for this lecture

Prerequisites

The course is aimed at bachelor/master students who have taken the following (or similar) courses:

  • IN0001 Introduction to Informatics + IN0002 Fundamentals of Programming
  • IN0007 Fundamentals of Algorithms and Data Structures

Prior experience in C++ or C is not required. Experience with imperative and object-oriented programming languages like Java is necessary.

Material

TBA