Modern-CPP-Programming

Modern C++ Programming

C++03 / C++11 / C++14 / C++17 / C++20 / C++23 / C++26

This open-access course is directed at those who are already familiar with C and object-oriented programming towards a proficiency level of C++ programming. The course covers the basics of C++ programming and moves on to advanced C++ semantics and concepts.

Key features:

If you enjoy the course or you find it useful, please add a Star

stars - Modern-CPP-Programming

CHAPTERS

# TITLE MAIN FOCUS
1 Introduction (html) History of C/C++, Areas of applications, Course introduction
2 Preparation (html) Books, How to compile, Hello world
3 Basic Concepts I (html) Type System, Fundamental types, and Operators
4 Basic Concepts II (html) Integral and Floating-point types and their arithmetic
5 Basic Concepts III (html) Entities, Enumerators, Structures, Control flow statements
6 Basic Concepts IV (html) Heap, Stack, Pointers, References, Const properties, Conversion operators
7 Basic Concepts V (html) Functions, Lambda expressions, Preprocessing directives
8 Object-Oriented Programming I (html) Class hierarchy, Constructor, Destructor, Class keywords
9 Object Oriented Programming II (html) Polymorphism, Operators overloading
10 Templates and Meta-programming I (html) Function template, Type traits, Compile-time utilities
11 Templates and Meta-programming II (html) Class template, SFINAE
12 Translation Units I (html) Linkage and One Definition Rule
13 Translation Units II (html) Dealing with multiple translation units and files,#include, Modules
14 Code Conventions (html) Project organization, Main code conventions
15 Debugging and Testing (html) Execution/memory debugging, Sanitizers, Harding techniques, Unit test, Test-Driven Development
16 Ecosystem (html) Cmake, Documenting, and Other Tools
17 Utilities (html) Main std libraries
18 Containers, Iterators, and Algorithms (html) Containers, Iterators, Algorithms, Ranges
19 Advanced Topics I (html) Move semantics, Universal reference, Type deduction
20 Advanced Topics II (html) Error handling, C++ idioms, Smart pointers
21 Performance Optimizations I (html) Ahmdal Law, Performance bounds, Architecture concepts (ILP, SIMD, etc.), Memory hierarchy
22 Performance Optimizations II (html) Arithmetic optimizations, Memory optimizations, etc.
23 Performance Optimizations III (html) Compiler optimizations, Profiling, Benchmarking tools
24 Software Design I (html) Basic Concepts, Principles, Use cases
25 Software Design II (html) Design Patterns and Idioms

ALL-IN-ONE BOOK: modern-cpp.pdf (could be a few commits behind), html

TOPICS IN DETAILS

1. Introduction

2. Preparation

3. Basic Concepts I - Type System, Fundamental Types, and Operators

4. Basic Concepts II - Integral and Floating-point Types

5. Basic Concepts III - Entities and Control Flow

6. Basic Concepts IV - Memory Concepts

7. Basic Concepts V - Functions and Preprocessing

8. Object-Oriented Programming I - Class Concepts

9. Object-Oriented Programming II - Polymorphism and Operator Overloading

10. Templates and Meta-programming I - Function Templates and Compile-Time Utilities

11. Templates and Meta-programming II - Class Templates and SFINAE

12. Translation Units I - Linkage and One Definition Rule

13. Translation Units II - Include, Module, and Namespace

14. Code Conventions

15. Debugging and Testing

16. Ecosystem - Cmake and Other Tools

17. Utilities

18. Containers, Iterators, and Algorithms

19. Advanced Topics I

20. Advanced Topics II

21. Optimization I - Basic Concepts

22. Optimization II - Code Optimization

23. Optimization III - Non-Coding Optimizations and Benchmarking

24. Software Design I - Basic Concepts (DRAFT)

25. Software Design II - Design Patterns and Idioms (DRAFT)

Roadmap

  1. Improve Software Design Chapters
  2. Build Aspects Chapter (e.g. reducing build time)

Reporting bugs 🐛 and contributing

If you find any typo, conceptual error, or section to improve, please report them by using the issue panel.

Author

Federico Busato, https://federico-busato.github.io/