Systems Programming in C++

Information

Content

  • Gain in-depth knowledge on modern C++ programming techniques and the C++ ecosystem
  • Learn to write good C++
  • Learn to implement large systems with C++
  • Learn to write high-performance code with C++

Prerequisites

We do not expect that you have any previous programming experience with either C or C++, but you should be familiar with a general-purpose programming language of your choice. Furthermore, you should be familiar with common algorithms and data structures, as well as computer architecture and operating systems. This is roughly equivalent to having attended the following lectures.
  • Introduction to Informatics 1 (IN0001)
  • Fundamentals of Programming (IN0002)
  • Fundamentals of Algorithms and Data Structures (IN0007)
B.Sc. Informatics:
  • Introduction to Computer Architecture (IN0004)
  • Basic Principles: Operating Systems and System Software (IN0009)
B.Sc. Informatics: Games Engineering:
  • Operating Systems and Hardware oriented Programming for Games (IN0034)

Organization

  • Pre-course meeting: Friday, February 1 2019, 14:00h in 02.11.018
  • Register for the course through the matching platform
  • Lecture: Tuesdays, 14:00h-16:00h in 02.11.018
  • Tutorial: Fridays, 10:00h-12:00h in 02.11.018
  • First lecture: Tuesday, April 23 2019
  • Attendance is mandatory in both lectures and tutorials
  • The practical course will be held in English

Grading

  • Weekly programming assignments during the semester
  • Larger final project at the end of the semester
  • Assignments and final project must be solved individually (no teamwork)

Literature

Primary
  • C++ Reference Documentation
  • Lippman, 2013. C++ Primer (5th edition).
  • Stroustrup, 2013. The C++ Programming Language (4th edition).
  • Meyers, 2015. Effective Modern C++. 42 Specific Ways to Improve Your Use of C++11 and C++14.
Supplementary
  • Aho, Lam, Sethi & Ullman, 2007. Compilers. Principles, Techniques & Tools (2nd edition).
  • Tanenbaum, 2006. Structured Computer Organization (5th edition).

Lecture Slides

DateTopic
01.02.2019Slides of the Pre-Course Meeting
23.04.2019Lecture 01.1: Organization & Introduction
26.04.2019Lecture 01.2: Introduction to the C++ Ecosystem
30.04.2019Lecture 02.1: Basic C++ Syntax
03.05.2019Lecture 02.2: Compiling C++ Files / Declarations & Definitions
07.05.2019Lecture 03: References, Arrays, and Pointers
14.05.2019Lecture 04: Classes
21.05.2019Lecture 05: Dynamic Memory Management, Copy & Move Semantics, Ownership
28.05.2019Lecture 06: Inheritance
04.06.2019Lecture 07: Templates
18.06.2019Lecture 08: Standard Library I
25.06.2019Lecture 09: Standard Library II
02.07.2019Lecture 10: Multi-Threading
09.07.2019Lecture 11: Organizing Larger Projects
16.07.2019Lecture 12: C++ Systems Programming on Linux
23.07.2019Lecture 13: Miscellaneous
-All slides in a single document
The lecture slides contain licensed material

Programming Assignments

Sheet GitLab Repository Due Date
01 https://gitlab.db.in.tum.de/cpplab19/sheet01 02.05.2019 23:59
02 https://gitlab.db.in.tum.de/cpplab19/sheet02 09.05.2019 23:59
03 https://gitlab.db.in.tum.de/cpplab19/sheet03 16.05.2019 23:59
04 https://gitlab.db.in.tum.de/cpplab19/sheet04 23.05.2019 23:59
05 https://gitlab.db.in.tum.de/cpplab19/sheet05 30.05.2019 23:59
06 https://gitlab.db.in.tum.de/cpplab19/sheet06 06.06.2019 23:59
07 https://gitlab.db.in.tum.de/cpplab19/sheet07 13.06.2019 23:59
08 https://gitlab.db.in.tum.de/cpplab19/sheet08 11.07.2019 23:59

Final Project

GitLab Repository: https://gitlab.db.in.tum.de/cpplab19/final
Due Date: 11.08.2019 23:59