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)
- Introduction to Computer Architecture (IN0004)
- Basic Principles: Operating Systems and System Software (IN0009)
- Operating Systems and Hardware oriented Programming for Games (IN0034)
Organization
- Kickoff meeting: Thursday, 03.02.2022 at 10:00h online on BigBlueButton
- Register for the course through the matching platform
- Lecture: Tuesdays, 12:00h-14:00h in 02.11.018
- Tutorial: Fridays, 10:00h-12:00h in 02.11.018
- First lecture: Tuesday, 26.04.2022
- Attendance is mandatory in both lectures and tutorials
- The practical course will be held in English
Grading
- Regular short written quizzes
- 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.
- Aho, Lam, Sethi & Ullman, 2007. Compilers. Principles, Techniques & Tools (2nd edition).
- Tanenbaum, 2006. Structured Computer Organization (5th edition).
Lecture Slides and Recordings
Date | Topic | |
03.02.2022 | Kickoff Meeting | |
26.04.2022 | Lecture 01.1: Organization & Introduction | |
29.04.2022 | Lecture 01.2: Introduction to the C++ Ecosystem | |
03.05.2022 | Lecture 02.1: Basic C++ Syntax | |
06.05.2022 | Lecture 02.2: Compiling C++ Files & Declarations and Definitions | |
13.05.2022 | Lecture 03: References, Arrays, and Pointers | |
20.05.2022 | Lecture 04: Classes | |
27.05.2022 | Lecture 05: Dynamic Memory Management | |
03.06.2022 | Lecture 06: Inheritance | |
14.06.2022 | Lecture 07: Templates | |
21.06.2022 | Lecture 08: Standard Library I | |
28.06.2022 | Lecture 09: Standard Library II | |
05.07.2022 | Lecture 10.1: Concurrency in Modern Hardware & Parallel Programming | 12.07.2022 | Lecture 10.2: Multi-Threading in C++ | 15.07.2022 | Lecture 11: Organizing Larger Projects | 22.07.2022 | Lecture 12: C++ Systems Programming on Linux | 29.07.2022 | Lecture 13: Miscellaneous |
all slides in a single document |
- CMake Logo by the CMake team (Creative Commons Attribution 2.0 Generic License)
Errata
- 21.06.2022: Lecture 08: Fixed typos on slides 512, 514
- 12.07.2022: Lecture 10.2: Fixed typos on slides 671, 672, 683
Programming Assignments
Sheet | GitLab Repository | Due Date |
01 | https://gitlab.db.in.tum.de/cpplab22/sheet01 | 05.05.2022 23:59 |
02 | https://gitlab.db.in.tum.de/cpplab22/sheet02 | 12.05.2022 23:59 |
03 | https://gitlab.db.in.tum.de/cpplab22/sheet03 | 23.05.2022 23:59 |
04 | https://gitlab.db.in.tum.de/cpplab22/sheet04 | 30.05.2022 23:59 |
05 | https://gitlab.db.in.tum.de/cpplab22/sheet05 | 06.06.2022 23:59 |
06 | https://gitlab.db.in.tum.de/cpplab22/sheet06 | 13.06.2022 23:59 |
07 | https://gitlab.db.in.tum.de/cpplab22/sheet07 | 23.06.2022 23:59 |
08 | https://gitlab.db.in.tum.de/cpplab22/sheet08 | 21.07.2022 23:59 |
Final Project
GitLab Repository: https://gitlab.db.in.tum.de/cpplab22/final
Due Date: 21.08.2022 23:59