Skip to content

Latest commit

 

History

History
677 lines (540 loc) · 27.5 KB

readme.md

File metadata and controls

677 lines (540 loc) · 27.5 KB

Lectures and homeworks

Build status Visitors

This is a list of lectures from the C++ for yourself course.

How to follow this 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! 😎

C++ for yourself

Hello world program dissection

Video thumbnail

Lecture script

  • First keywords
  • What brackets mean
  • What do different signs mean
  • Intro to "scopes"
  • Intro to functions
  • Intro to includes

Homework: hello world program

Homework script

  • Write a simple program that prints Hello World!
  • Learn to compile and run simple programs

Variables of fundamental types

Video thumbnail

Lecture script

  • How to create variables of fundamental types
  • Naming variables
  • Using const, constexpr with variables
  • References to variables

Namespaces for variables

Video thumbnail

Lecture script

  • Namespaces with variables
  • The word using with variables

Input/output streams

Video thumbnail

Lecture script

  • std::cout, std::cerr, std::cin

Sequence and utility containers

Video thumbnail

Lecture script

  • 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

Video thumbnail

Lecture script

  • std::map and std::unordered_map
  • Touch up on std::set and std::unordered_set

Homework: fortune teller program

Homework script

  • Write a program that tells your C++ fortune
  • It reads and writes data from and to terminal
  • Stores and accesses these data in containers

Control structures

Video thumbnail

Lecture script

  • if, switch and ternary operator
  • for, while and do ... while

Random number generation

Video thumbnail

Lecture script

  • What are random numbers
  • How to generate them in modern C++
  • Why not to use rand()

Homework: the guessing game

Video thumbnail

Homework script

  • 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

Video thumbnail

Lecture script

  • Useful compilation flags
  • Debugging a program with:
    • Print statements
    • lldb debugger

Functions

Video thumbnail

Lecture script

  • What is a function
  • Declaration and definition
  • Passing by reference
  • Overloading
  • Using default arguments

Enumerations

Video thumbnail

Lecture script

  • What are enums
  • How to use them?
  • Why not to use old style enums

Libraries and header files

Video thumbnail

Lecture script

  • Different types of libraries
    • Header-only
    • Static
    • Dynamic
  • What is linking
  • When to use the keyword inline
  • Some common best practices

Build systems introduction

Video thumbnail

Lecture script

  • Intro to build systems
  • Build commands as a script
  • Build commands in a Makefile

CMake introduction

Video thumbnail

Lecture script

  • Build process with CMake
  • CMake Variables
  • Targets and their properties
  • Example CMake project

Using GoogleTest framework for testing code

Video thumbnail

Lecture script

  • 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

Video thumbnail

Homework script

  • 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

Video thumbnail

Lecture script

  • Explain why the classes are needed
  • Implement an example game about a car
  • Define classes and structs more formally

Raw pointers

Video thumbnail

Lecture script

  • 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

Video thumbnail

Lecture script

  • Creating a new object
  • What happens when an object dies
  • Full class lifecycle explained

Move semantics

Video thumbnail

Lecture script

  • 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

Video thumbnail

Lecture script

  • “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”

Headers with classes

Video thumbnail

Lecture script

  • What stays the same
  • What is different
  • Example to show it all

Const correctness

Video thumbnail

Lecture script

  • What is const correctness
  • Some rules and examples to follow in order to work with const correctly

Homework: pixelate images in terminal

Video thumbnail

Homework script

  • 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
    • Manage memory allocated elsewhere correctly
    • Writing multiple libraries and binaries and linking them together
    • Manage a larger CMake project

Keyword static outside of classes

Video thumbnail

Lecture script

  • 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

Video thumbnail

Lecture script

  • Using static class methods
  • Using static class data
  • What is static in classes useful for?

Templates: why would we want to use them?

Video thumbnail

Lecture script

  • 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

Templates: what do they do under the hood?

Video thumbnail

Lecture script

  • Compilation process recap
  • Compiler uses templates to generate code
  • Hands-on example
  • Compiler is lazy

How to write function templates

Video thumbnail

Lecture script

  • The basics of writing a function template
  • Explicit template parameters
  • Implicit template parameters
  • Using both explicit and implicit template parameters at the same time
  • Function overloading and templates
  • Full function template specialization and why function overloading is better

How to write class templates

Video thumbnail


Forwarding references

Video thumbnail


Header and source files for templated code

Video thumbnail


Almost everything about inheritance

Video thumbnail


Memory management and smart pointers

Video thumbnail


Lambdas in modern C++

Video thumbnail


PS

Most of the code snippets are validated automatically

If you do find an error in some of those, please open an issue in this repo!