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 I (html) Project organization, code conventions intro, entities conventions
15 Code Conventions II (html) Template, namespace, modern c++, maintainability , naming, and formatting conventions
16 Debugging and Testing (html) Execution/memory debugging, Sanitizers, Harding techniques, Unit test, Test-Driven Development
17 Ecosystem (html) Cmake, Documenting, and Other Tools
18 Utilities (html) Main std libraries
19 Containers, Iterators, and Algorithms (html) Containers, Iterators, Algorithms, Ranges
20 Advanced Topics I (html) Move semantics, Universal reference, Type deduction
21 Advanced Topics II (html) Error handling, C++ idioms, Smart pointers
22 Performance Optimizations I (html) Ahmdal Law, Performance bounds, Architecture concepts (ILP, SIMD, etc.), Memory hierarchy
23 Performance Optimizations II (html) Arithmetic optimizations, Memory optimizations, etc.
24 Performance Optimizations III (html) Compiler optimizations, Profiling, Benchmarking tools
25 Software Design I (html) Basic Concepts, Principles, Use cases
26 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 I

15. Code Conventions II

16. Debugging and Testing

17. Ecosystem - Cmake and Other Tools

18. Utilities

19. Containers, Iterators, and Algorithms

20. Advanced Topics I

21. Advanced Topics II

22. Optimization I - Basic Concepts

23. Optimization II - Code Optimization

24. Optimization III - Non-Coding Optimizations and Benchmarking

25. Software Design I - Basic Concepts (DRAFT)

26. 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/