Grundlagen der C++ Programmierung

Since 2013, I have been teaching the lecture Basics of C++-Programming (in German) jointly with colleagues.    Studium

A short history of this lecture

This lecture emerged from a voluntary course that was offered by students to students and that was part of a series of courses organized by the student game developer club Acagamics.

Due to its success and the high level of interest, we decided to make the informal course a “real” lecture, meaning one that provides credit points…

Credits

Many people have contributed to the success of this lecture! In particular, it has been revised with every iteration since 2013 — as also the C++ Standard has been developed further…

I was always involved and formally responsible for the lecture — but I depended on many others who did the main work including most of the teaching.

At this point I would like to express my sincere thanks to

  • Johannes Jendersie and Andreas Reich (2013, 2014)
  • John McLaughlin (2015, 2016)
  • Anke Friederici (2017)
  • Timo Oster (2018)
  • Thomas Wilde (2019, 2020, 2021, 2022)

Thomas Wilde is now in fully charge of the lecture, which moves from summer to winter term. I will continue to provide the web-service and the backend.

Overview

We expect 50 – 100 students in this course. We may have to limit the number of participants depending on the number of available exercise groups.

The course is an introductory course, however, the intended audience is not beginners: Programming experience in Java is required!

Contents

  • Build process: compiler, linker, build tool
  • Similarities and differences to Java
  • Data types, arrays, pointers, dynamic memory
  • Classes
    • Methods & member variables
    • Access control
    • Memory layout
    • Constructors & destructors
  • References, const-ness, const-correctnes
  • Namespaces & enums
  • More on classes
    • Default constructors
    • Copy-constructor, copy-assignmentrule-of-3
    • Memory management
    • Operator overloading
    • Polymorphism: virtual inheritance
  • Generic programming: simple templates
  • Introduction to the standard library
  • Smart pointers: shared_ptr<> & unique_ptr<>
  • Specialization & advanced use of templates
  • Functors & lambdas and function pointers
  • Exception handling
  • Debugging techniques
  • Building and using libraries

We recommend a tool chain based on GNU GCC or Clang. We give an introduction to CMake for building, and we use advanced tools like Valgrind for detecting all kinds of (memory) bugs that are virtually impossible in Java. ( GNU/Linux recommended.) And we will often reference the C++ Core Guidelines.

Organization

extent (week) 2h lecture + 2h exercises
credit points 5
course language German (literature partially in English)
prerequisites Java programming; EinfInf and AuD recommended
recommended semester >2
official times & dates please search LSF (no permalink available)