This is a list of lectures from the C++ for yourself course.
The course is designed to be consumed from top to bottom, so start at the beginning and you will always have enough knowledge for the next video.
That being said, I aim to leave links in the videos so that one could watch them out of order without much hassle.
Enjoy! 😎
Hello world program dissection
- First keywords
- What brackets mean
- What do different signs mean
- Intro to "scopes"
- Intro to functions
- Intro to includes
Homework
: hello world program
- Write a simple program that prints
Hello World!
- Learn to compile and run simple programs
Variables of fundamental types
- How to create variables of fundamental types
- Naming variables
- Using
const
,constexpr
with variables - References to variables
Sequence and utility containers
- Sequence containers:
std::array
,std::vector
, their usage and some caveats - Pair container:
std::pair
- Strings from STL:
std::string
- Conversion to/from strings:
to_string
,stoi
,stod
,stof
, etc. - Aggregate initialization
Associative containers
std::map
andstd::unordered_map
- Touch up on
std::set
andstd::unordered_set
Homework
: fortune teller program
- Write a program that tells your C++ fortune
- It reads and writes data from and to terminal
- Stores and accesses these data in containers
Random number generation
- What are random numbers
- How to generate them in modern C++
- Why not to use
rand()
Homework
: the guessing game
- A program that generates a number
- The user guesses this number
- The program tells the user if they are above or below with their guess (or if they've won)
Compilation flags and debugging
- Useful compilation flags
- Debugging a program with:
- Print statements
lldb
debugger
Functions
- What is a function
- Declaration and definition
- Passing by reference
- Overloading
- Using default arguments
Libraries and header files
- Different types of libraries
- Header-only
- Static
- Dynamic
- What is linking
- When to use the keyword
inline
- Some common best practices
Build systems introduction
- Intro to build systems
- Build commands as a script
- Build commands in a
Makefile
CMake introduction
- Build process with CMake
- CMake Variables
- Targets and their properties
- Example CMake project
Using GoogleTest framework for testing code
- Explain what testing is for
- Explain what testing is
- Show how to download and setup googletest
- Show how to write a simple test
Homework
: string processing library
- You will write library that allows to split and trim strings
- You will learn how to:
- Write a CMake project from scratch
- Write your own libraries
- Test them with googletest
- Link them to binaries
Simple custom types with classes and structs
- Explain why the classes are needed
- Implement an example game about a car
- Define classes and structs more formally
Raw pointers
- The pointer type
- Pointers = variables of pointer types
- How to get the data?
- Initialization and assignment
- Using const with pointers
- Non-const pointer to const data
- Constant pointer to non-const data
- Constant pointer to constant data
Object lifecycle
- Creating a new object
- What happens when an object dies
- Full class lifecycle explained
Move semantics
- Why we care about move semantics
- Let’s re-design move semantics from scratch
- How is it actually designed and called in Modern C++?
Constructors, operators, destructor - rule of all or nothing
- “Good style” as our guide
- What is “good style”
- Setting up the example
- Rule 1: destructor
- Rule 2: copy constructor
- Rule 3: copy assignment operator
- Rule 4: move constructor
- Rule 5: move assignment operator
- Now we (mostly) follow best practices
- Rule of 5 (and 3)
- The rule of “all or nothing”
Const correctness
- What is const correctness
- Some rules and examples to follow in order to work with
const
correctly
Homework
: pixelate images in terminal
- You will write a library that allows to pixelate an image
- You will learn how to:
- Work with classes
- Use external libraries
- Read images from disk using
stb_image.h
- Draw stuff in the terminal using
FTXUI
library
- Read images from disk using
- Manage memory allocated elsewhere correctly
- Writing multiple libraries and binaries and linking them together
- Manage a larger CMake project
Keyword static
outside of classes
- Why we should not use
static
outside of classes - Relation to storage duration
- Relation to linkage
- Why we should use
inline
instead
Keyword static
inside classes
- Using
static
class methods - Using
static
class data - What is
static
in classes useful for?
Templates: why would we want to use them?
- Templates provide abstraction and separation of concerns
- Function templates
- Class and struct templates
- Generic algorithms and design patterns
- Zero runtime cost (almost)
- Compile-time meta-programming
- Summary
If you do find an error in some of those, please open an issue in this repo!