Complete Modern C++
Created by Umar Lone, Last Updated 14-Jul-2020, Language:English
Complete Modern C++
The most comprehensive C++ tutorial with C++11/14/17 features
Created by Umar Lone, Last Updated 14-Jul-2020, Language:English
What Will I Get ?
- Use C++ as an object-oriented language
- Demystify function & class templates
- Use STL components in your applications
- Write real-world applications in C++
- Apply Modern C++ (C++11/14/17) in programs
Requirements
- Basic programming knowledge in any computer language
- Some experience of writing programs in any language
- Modern C++ compiler, preferably Visual Studio 2015/17/19 Community (or XCode, Clang, g++, Cevelop, Eclipse CDT, Code::Blocks)
Description
Updated with C++17 features!
C++ is a general purpose programming language invented by Bjarne Stroustrup. It is still one of the more popular programming languages, used for creating high performance applications across a wide variety of domains & platforms.
In 2011, C++11 was born. This revision added lot of new features to the language and it got a new name, Modern C++. This emphasizes writing C++ code using modern features of the language such as move semantics, automatic type inference, threading, lambda expressions, smart pointers and a lot more. C++11 was followed by C++14, that added even more features and enhanced existing onces. In 2017, we may see a new release called C++17, that will add a filesystem library (covered in the course), parallel versions of STL algorithms, new library types such as std::optional, std::any and more.
This course teaches C++ as an object oriented language with modern features. It focuses on teaching C++ concepts, both old and new, with clear examples. It builds upon the basic language facilities that are then used to build more complex programs with classes, operator overloading, composition, inheritance, polymorphism, templates, concurrency, etc. It even digs deep into assembly to understand few concepts better. After every few topics, a quiz is presented that tests your understanding of the previous topics. Have fun learning Modern C++.
Note that this course is not for you if
You have never programmed before
You don't know ANY programming language
You want to learn basics of programming
Update [April 19, 2020] : Biggest update so far. Added C++17 core language changes, template enhancement and new library types.
Who this course is for:
- College students who want to learn Modern C++
- Expert C++ developers who want to migrate to Modern C++
- C++ developers with varying level of experience, who want to refresh basics of the C++ language and get acquainted with the new features
- Software professionals who want to learn & implement Modern C++
- Anyone who is comfortable with other languages like C, Java, C#, Python, etc, and wants to learn & apply Modern C++
- Anyone interested in learning C++
Course Content
-
Tools and Installation
8 Lectures 00:24:26-
Introduction
Preview00:03:01 -
Course Resources
-
Visual Studio 2015 Installation
00:04:32 -
Visual Studio 2017 Installation
00:02:44 -
Code::Blocks Installation
00:05:06 -
Cevelop Installation
00:05:31 -
XCode Installation on MacOS
00:03:32 -
Course Slides
-
-
Basic Language Facilities
22 Lectures 02:25:21-
What is C++?
Preview00:03:31 -
First C++ Program
Preview00:08:06 -
The C++ Compilation Process
Preview00:03:09 -
Primitive Types & Variables
00:07:57 -
Basic Input/Output
00:05:56 -
Overview of Debugging in Visual Studio
00:05:40 -
Uniform Initialization (C++11)
Preview00:09:21 -
Pointers
00:08:18 -
Functions Basics - Part I
00:07:27 -
Functions Basics - Part II
00:09:05 -
Reference
00:05:31 -
Reference Vs Pointer
00:06:58 -
The const Qualifier
00:04:19 -
const Qualifer & Compound Types
00:07:30 -
Automatic Type Inference (C++11)
00:07:00 -
Range-Based For Loop - I (C++11)
00:04:32 -
Range-Based For Loop - II (C++11)
00:06:18 -
Function Overloading
00:09:07 -
Default Function Arguments
00:03:43 -
Inline Functions
00:07:36 -
Function Pointers
00:04:53 -
Namespace
00:09:24
-
-
Memory Management - Part I
4 Lectures 00:27:42-
Dynamic Memory Allocation - Part I (malloc function)
00:09:36 -
Dynamic Memory Allocation - Part II (new operator)
00:06:19 -
Dynamic Memory Allocation - Part III (new[] operator)
00:06:40 -
Dynamic Memory Allocation - Part IV (2D arrays)
00:05:07
-
-
Classes & Objects
17 Lectures 01:26:23-
Object Oriented Programming Basics
Preview00:05:50 -
Class
00:05:30 -
Constructor & Destructor
00:04:28 -
Structures
00:02:38 -
Non-static Data Member Initializers (C++11)
00:04:39 -
this Pointer
00:04:46 -
Constant Member Functions
00:03:14 -
Static Class Members
00:05:12 -
Copy Constructor - Part I
00:04:52 -
Copy Constructor - Part II
00:04:40 -
Delegating Constructors (C++11)
00:04:01 -
Default & Deleted Functions (C++11)
00:05:18 -
L-values, R-values & R-value References (C++11)
00:07:10 -
Move Semantics - Basics (C++11)
00:03:23 -
Move Semantics - Implementation (C++11)
00:04:19 -
Copy Elision
00:08:31 -
Move Semantics - std::move Function (C++11)
00:07:52
-
-
Operator Overloading
11 Lectures 00:52:18-
Operator Overloading - Part I (Basics)
00:08:28 -
Operator Overloading - Part II (Assignment Operator)
00:04:17 -
Operator Overloading - Part III (Global Overloads)
00:05:48 -
Operator Overloading - Part IV (Friend Keyword)
00:02:29 -
Operator Overloading - Part V (Smart Pointer Basics)
00:05:04 -
Operator Overloading - Part VI (Smart Pointers in C++11)
00:04:34 -
Operator Overloading - Part VII (Rules)
00:01:55 -
Type Conversions - Part I (Basics)
00:05:56 -
Type Conversions - Part II (Primitive to User Type)
00:05:39 -
Type Conversions - Part III (User to Primitive Type)
00:02:50 -
Initialization Vs. Assignment & Member Initialization List
00:05:18
-
-
Memory Management - Part II
6 Lectures 00:51:30-
Smart Pointers - I
00:05:11 -
Smart Pointers - II
00:10:11 -
Smart Pointers - III
00:10:27 -
Smart Pointers - IV
00:08:49 -
Smart Pointers - V
00:06:26 -
Smart Pointers - VI
00:10:26
-
-
More C++ Goodies
10 Lectures 01:12:14-
Enums - Part I (Basics)
00:03:42 -
Enums - Part II (Scoped Enums C++11)
00:05:32 -
Strings - Part I (Raw Strings)
00:06:49 -
Strings - Part II (std::string)
00:10:05 -
Strings - Part III (String Streams)
00:09:45 -
Constant Expressions - constexpr (C++11)
00:09:24 -
std::initializer_list (C++11)
00:08:27 -
Dynamic Array (std::vector)
00:08:43 -
Union - I
00:04:51 -
Union - II
00:04:56
-
-
Object Oriented Programming
14 Lectures 01:22:39-
Inheritance & Composition
Preview00:06:01 -
Inheritance & Access Modifiers
00:03:55 -
Project - Part I (Beginning)
00:02:06 -
Project - Part II (Account & Savings Implementation)
00:06:59 -
Project - Part IV (Inheriting Constructors of C++11)
00:06:31 -
Project - Part V (Virtual Keyword)
00:08:53 -
Project - Part VI (Virtual Mechanism Internals)
00:07:11 -
Project - Part VII (Virtual Mechanism Walk-through & Virtual Destructor)
00:06:42 -
Project - Part VIII (override & final specifier in C++11)
00:06:13 -
Project - Part IX (Upcasting & Downcasting)
00:02:16 -
Project - Part X (RTTI Basics)
00:07:11 -
Project - Part XI (RTTI Operators)
00:03:17 -
Abstract Class
00:06:03 -
Multiple (Diamond) Inheritance
00:09:21
-
-
Exception Handling
6 Lectures 00:39:05-
Exception Handling - Part I (Basics)
00:07:59 -
Exception Handling - Part II (Multiple Catch Blocks)
00:03:58 -
Exception Handling - Part III (Stack Unwinding)
00:06:31 -
Exception Handling - Part IV (Nested Exceptions)
00:05:11 -
Exception Handling - Part V (Constructor & Destructor)
00:07:06 -
Exception Handling - Part VI - (noexcept keyword in C++11)
00:08:20
-
-
File Input & Output
7 Lectures 00:39:40-
Raw String Literals (C++11)
00:04:03 -
Introduction to Filesystem Library (C++17) (DEPRECATED)
00:03:49 -
File IO - Part I (Basics)
00:06:44 -
File IO - Part II (Error Handling)
00:05:43 -
File IO - Part III (Copy Utility)
00:03:29 -
File IO - Part IV (Character IO & Seeking)
00:07:22 -
File IO - Part V (Binary IO)
00:08:30
-
-
Templates
17 Lectures 01:51:36-
Introduction to Templates
00:07:48 -
Template Argument Deduction & Instantiation
00:06:27 -
Explicit Specialization
00:05:54 -
Non-type Template Arguments
00:07:14 -
Perfect Forwarding - Part I (C++11)
00:07:23 -
Perfect Forwarding - Part II (C++11)
00:05:32 -
Variadic Templates - Part I (C++11)
00:09:47 -
Variadic Templates - Part II (C++11)
00:04:50 -
Class Templates
00:08:39 -
Class Template Explicit Specialization - Part I
00:05:41 -
Class Template Explicit Specialization - Part II
00:04:02 -
Class Template Partial Specialization
00:06:52 -
Typedef, Type Alias & Alias Templates (C++11)
00:08:07 -
Type Traits (C++11)
00:04:19 -
static_assert (C++11)
00:07:21 -
StaticAssert
00:04:19 -
TypeTraits
00:07:21
-
-
Lambda Expressions (C++11)
8 Lectures 00:46:15-
Callbacks Revisited - Function Pointers
00:06:39 -
Callbacks - Function Objects
00:06:57 -
Lambda Expressions - Internals
00:05:01 -
Lambda Expressions
00:04:36 -
Lambda Expressions Capture List - Part I
00:08:25 -
Lambda Expressions Capture List - Part II
00:04:07 -
Lambda Expressions Capture List - Part III
00:05:57 -
Generalized Lambda Capture
00:04:33
-
-
Standard Template Library
13 Lectures 01:05:37-
Introduction
00:02:50 -
std::array (C++11)
00:04:02 -
std::vector
00:04:38 -
std::deque
00:02:21 -
std::list & std::forward_list (C++11)
00:04:59 -
std::set & std::multiset
00:05:42 -
std::map & std::multimap
00:07:34 -
Unordered Containers (C++11) - I
00:04:38 -
Unordered Containers (C++11) - II
00:05:48 -
std::hash (C++11)
00:02:42 -
Big O Notation & Performance of Containers
00:05:04 -
Algorithms - Part I
00:08:15 -
Algorithms - Part II
00:07:04
-
-
C++ Concurrency
12 Lectures 01:00:04-
Concurrency Basics
00:05:42 -
Thread Creation (std::thread)
00:05:47 -
Passing Arguments To Threads
00:04:18 -
Thread Synchronization (std::mutex)
00:06:17 -
Task Based Concurrency - Part I
00:05:07 -
Task Based Concurrency - Part II
00:03:44 -
std::lock_guard
00:02:45 -
std::thread Functions & std::this_thread Namespace
00:07:48 -
Launch Policies
00:04:38 -
std::future Wait Functions
00:05:07 -
Using std::promise
00:05:36 -
Propagating Exceptions Across Threads
00:03:15
-
-
C++17 Core Language Features
13 Lectures 01:07:22-
Deprecated & Removed Features
00:03:53 -
Changes
00:03:12 -
Attributes
00:05:58 -
Feature Test Macros
00:05:50 -
If & switch With Initialization
00:05:47 -
inline Variables
00:05:45 -
Nested Namespaces
00:01:51 -
noexcept
00:03:35 -
constexpr Lambda
00:07:47 -
Structured Bindings
00:08:07 -
Expression Evaluation Order
00:06:36 -
Mandatory Copy Elision - I
00:04:28 -
Mandatory Copy Elision - II
00:04:33
-
-
C++17 Template Features
8 Lectures 00:38:24-
Compiled Time Argument Deduction (CTAD)
00:05:41 -
Folding Basics
00:04:05 -
Fold Expressions - Unary Folds
00:04:27 -
Fold Expressions - Binary Folds
00:05:51 -
Fold Expressions - Recap
00:02:34 -
Type Traits Suffixes
00:03:22 -
if constexpr - I
00:07:42 -
if constexpr - II
00:04:42
-
-
C++17 Standard Library Components
16 Lectures 01:31:40-
std::optional - I
00:05:18 -
std::optional - II
00:03:50 -
std::optional - III
00:03:06 -
std::variant - I
00:05:57 -
std::variant - II
00:04:39 -
std::variant - III
00:05:58 -
std::any
00:06:33 -
std::string_view - I
00:08:39 -
std::string_view - II
00:08:13 -
Filesystem - path
00:05:49 -
Filesystem - directory_entry
00:07:00 -
Filesystem - Directory Functions
00:05:09 -
Filesystem - Permissions
00:05:44 -
Parallel Algorithms - I
00:03:49 -
Parallel Algorithms - II
00:07:32 -
Parallel Algorithms - III
00:04:24
-