Beginning Modern C++
4.4 (64 ratings)
Instead of using a simple lifetime average, Udemy calculates a course's star rating by considering a number of different factors such as the number of ratings, the age of ratings, and the likelihood of fraudulent ratings.
516 students enrolled
Wishlisted Wishlist

Please confirm that you want to add Beginning Modern C++ to your Wishlist.

Add to Wishlist

Beginning Modern C++

The most comprehensive C++ tutorial with C++11/14 features
4.4 (64 ratings)
Instead of using a simple lifetime average, Udemy calculates a course's star rating by considering a number of different factors such as the number of ratings, the age of ratings, and the likelihood of fraudulent ratings.
516 students enrolled
Created by Umar Lone
Last updated 8/2017
Curiosity Sale
Current price: $10 Original price: $150 Discount: 93% off
30-Day Money-Back Guarantee
  • 11 hours on-demand video
  • 24 Articles
  • 43 Supplemental Resources
  • Full lifetime access
  • Access on mobile and TV
  • Certificate of Completion
What Will I Learn?
  • Write real-world applications in C++
  • Apply Modern C++ in programs
  • Use C++ as an object-oriented language
View Curriculum
  • Basic programming knowledge in any computer language
  • Basic experience of writing programs in any language
  • Modern C++ compiler, preferably Visual Studio 2015/17 Community Edition

Learn C++ with modern features introduced with C++11/14

Update [April 27, 2017] : Templates, Function Object, Lambda Expressions, Standard Template Library

Update [Mar 23, 2017] : Virtual Inheritance, Exception handling, File I/O, std::filesystem (C++17)

Update [Mar 4, 2017] : Strings, stringstreams, enums, inheritance, polymorphism

Update [Feb 25, 2017] : Source Code of existing topics added

C++ is a general purpose programming language invented by Bjarne Stroustrup 37 years ago. 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 types such as std::optional 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. 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

  1. You have never programmed before
  2. You don't know ANY programming language
  3. You don't know the basic programming concepts such as variables, functions, loops, compiler, etc
  4. You want to learn basics of programming

NOTE:The course will be continuously updated with videos on the more topics.

Who is the target audience?
  • College students who want to learn Modern C++
  • C++ developers who want to learn & apply 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++
Students Who Viewed This Course Also Viewed
Curriculum For This Course
137 Lectures
Start Here
3 Lectures 07:51

This video gives an introduction of your instructor. It also gives an overview of the course content, prerequisites and the target audience.

Preview 02:48

A note on different C++ compilers

Required software

Shows how the installation process of Visual Studio for C++ programming

Visual Studio Installation
Basic Language Facilities
23 Lectures 02:02:04

Introduces Modern C++ and where it is used. It explains why C++ is chosen over other languages.

Preview 03:33

This video explains the structure of the first C++ program. It also gives an overview of compilation in Visual Studio.

First C++ Program

Explains the C++ build process in detail.

The C++ Compilation Process

Introduces primitive types in C++.

Primitive Types & Variables

Gives overview of basic input/output classes and demonstrates how to write on the console & read from the keyboard.

Basic Input/Output

Gives a gentle introduction to debugging  C++ applications in Visual Studio and also explains a few common shortcuts.

Overview of Debugging in Visual Studio

Explains the new way of initialization of scalar types.

Uniform Initialization (C++11)

Introduces pointers, syntax and their usage.


Tests your understanding of pointers and their syntax.


Explains reference type and how to use it instead of pointers.


Test your understanding of references.


Compares pointers and references and explains how to choose between them

Reference Vs Pointer

Explains the importance of const qualifier and its usage.

Preview 04:27

Explains how to use const qualifier with pointers and references.

const Qualifer & Compound Types

Test your understanding of using const qualifier with pointers and references


Introduces the auto keyword and explains how to use it to infer types automatically.

Automatic Type Inference (C++11)

This will help you gauge your understanding of the topics learned so far.

Basics Quiz - I
5 questions

Introduces the new range-based for loop in C++11 and explains how to use it.

Range-Based For Loop

Explains function overloading and how to use it 

Preview 09:07

Another convenience feature for programmers. This video explains syntax and usage

Default Function Arguments

Explains how to increase performance of your code by making your functions inline

Inline Functions

Introduces function pointers and explains their purpose.

Function Pointers

Explains how to use namespaces to group types together and avoid name clashes


Explains how to use new & delete to allocate memory at runtime

Dynamic Memory Management

This quiz will further test your knowledge of the previous topics.

Basics Quiz - II
10 questions
Classes & Objects
16 Lectures 01:10:46

Gives an overview of Object Oriented programming principles and how they relate to real-life objects.

Object Oriented Programming Basics

Explains the meaning and syntax of class


Explains the purpose of constructors and destructor and how they can be used to manage object initialization.

Constructor & Destructor

Explains the meaning and purpose of structures in C++


Explains this C++11 feature and shows how to use it to initialize class members during declaration. 

Non-static Data Member Initializers (C++11)

Explains this pointer and its purpose

this Pointer

Explains how to create read-only functions through the const qualifier

Constant Member Functions

Explains how to use the static keyword to create static member variables & functions

Static Class Members

Explains the copy constructor and why it is required

Copy Constructor - Part I

Explains how & when to implement a user-defined copy constructor. Also explains the rule of 3.

Copy Constructor - Part II

This quiz will test your understanding of classes, constructors, destructors and copy semantics

Quiz I
8 questions

Explains the C++11 feature of delegating constructors and how it can be used to prevent code duplication in constructors.

Delegating Constructors (C++11)

Explains how to use the C++11 keywords, default & delete, to control what functions are synthesized by the compiler.

Default & Deleted Functions (C++11)

Starts with the basics of l-values and r-values and then explains C++11 feature, R-value references.

Preview 07:10

Explains the concept of move semantics and how it improves performance.

Move Semantics - Concept (C++11)

Shows how to implement move semantics in a class. Also explains the rule of 5.

Move Semantics - Implementation (C++11)

Shows how to use std::move function to force move semantics on l-value

Move Semantics - std::move Function (C++11)

This quiz will test your understanding of move semantics and the new keywords (default, delete)

Quiz II
7 questions
Operator Overloading
12 Lectures 52:21

Contains source code only.

Operator Overloading Demo Code

Explains the basics of operator overloading and implementation of common unary & binary operators

Operator Overloading - Part I (Basics)

Explains why assignment operator is important, along with the Rule of 3

Operator Overloading - Part II (Assignment Operator)

Shows when operators need to be overloaded as global functions. Also shows implementation of overloaded stream operators (<< and >>).

Operator Overloading - Part III (Global Overloads)

Explains the purpose of friend keyword and when & where to use it.

Operator Overloading - Part IV (Friend Keyword)

Explains the RAII idiom (Resource Acquisition Is Initialization). Shows how to overload -> and * operator to create a smart pointer.

Operator Overloading - Part V (Smart Pointer Basics)

Demonstration of the smart pointers in C++11 (std::unique_ptr & std::shared_ptr)

Operator Overloading - Part VI (Smart Pointers in C++11)

A short discussion on the operator overloading rules.

Operator Overloading - Part VII (Rules)

Discussion on conversion between types using C++ casting operators

Type Conversions - Part I (Basics)

Explanation & implementation of how constructors are used by the compiler to perform type conversion.

Type Conversions - Part II (Primitive to User Type)

Explains how to implement type conversion operator function to convert a user-defined type into primitive type.

Type Conversions - Part III (User to Primitive Type)

Explains why initialization should be preferred over assignment.

Initialization Vs. Assignment

This will test your understanding of operator overloading & type conversions.

8 questions
More C++ Goodies
11 Lectures 01:03:31

Explains the purpose of enumerated types and when to use them.

Enums - Part I (Basics)

Implementation of scoped enums.

Enums - Part II (Scoped Enums C++11)

Demonstrates raw string and their usage. You get to learn why raw strings should be avoided.

Strings - Part I (Raw Strings)

Introduces std::string class from the standard library and its usage.

Strings - Part II (std::string)

Assignment on string conversion.

Assignment I

Explains string streams and their purpose. Also introduces the new string conversion functions of C++11.

Strings - Part III (String Streams)

Coding assignment on std::string

Assignment II

You'll learn how to write expressions that can be evaluated at compile time, thereby increasing the performance of your code.

Constant Expressions - constexpr (C++11)

This video discusses the purpose of std::initializer_list in depth.

std::initializer_list (C++11)

Introduces the std::vector class and demonstrates common operations of creation, insertion, deletion, etc.

Dynamic Array (std::vector)

Assignment III

Test your understanding on enums, strings, stringstreams & vector

5 questions
Object Oriented Programming
15 Lectures 01:13:41

Source code of Account classes

Account Hierarchy Source Code

We revisit inheritance and composition and explain it again with examples. This will give you a better understanding of these concepts.

Inheritance & Composition

Explains access modifiers in context of inheritance.

Inheritance & Access Modifiers

Explains the project on inheritance, that we'll implement in the subsequent videos.

Project - Part I (Beginning)

Implementation of the Account hierarchy

Project - Part II (Account & Savings Implementation)


Add the Checking class to the hierarchy and inherit it from the Account class. It does not have any interest rate, therefore, it will not implement the corresponding member functions. The only difference is that the account mandates the balance should not fall below 50. So, you'll have to re-implement the Withdraw function accordingly. 

You should proceed only after implementing the entire Account hierarchy.

Project - Part III (Assignment)

This video implements the Checking class. Shows how to invoke the base class member functions from the child classes. Also explains the inheriting constructors from C++11 and where to use them. 

Project - Part IV (Inheriting Constructors of C++11)

Introduces the virtual keyword and why it is needed.

Project - Part V (Virtual Keyword)

This part will test your understanding of basic concepts of inheritance.

Quiz I
6 questions

Explains the underlying implementation of virtual mechanism

Project - Part VI (Virtual Mechanism Internals)

This video walks through the code that is generated for virtual functions in Visual Studio. It also explains why base class destructors should be virtual.

Preview 06:44

This lecture explains the purpose of override & final specifier.

Project - Part VIII (override & final specifier in C++11)

Discussion on upcasting & downcasting within the objects of a class hierarchy

Project - Part IX (Upcasting & Downcasting)

This video explains the concepts of Run-time type Information and also introduces the typeid operator

Project - Part X (RTTI Basics)

This video explains the purpose of dynamic_cast operator & how to use it.

Project - Part XI (RTTI Operators)

Understand the concept of pure virtual functions and the abstract classes and learn when and where to use them.

Abstract Class

This quiz will test your understanding of virtual mechanism, virtual inheritance & RTTI.

Quiz II
5 questions
Exception Handling
6 Lectures 38:13

Explains why exception handling is required and how it is better than returning simple error codes.

Exception Handling - Part I (Basics)

This video explains more details on catch blocks.

  1. Writing multiple catch blocks
  2. Using base exception object in a catch block
  3. All catch block
Exception Handling - Part II (Multiple Catch Blocks)

This video explains the concept of stack unwinding. It also explains the pitfalls of manual memory management with exception handling..

Exception Handling - Part III (Stack Unwinding)

Explains the concept of nested exception handling and demonstrates its usage with an example.

Exception Handling - Part IV (Nested Exceptions)

This video explains exception handling in context of constructors and destructors.

Exception Handling - Part V (Constructor & Destructor)

Introduces the noexcept keyword. We learn its purpose and where it should be used.

Exception Handling - Part VI - (noexcept keyword in C++11)

Test your knowledge & understanding of exception handling.

4 questions
File Input & Output
10 Lectures 40:25

Introduces the C++11 raw string literals and explains their purpose & usage. 

Raw String Literals (C++11)

This video gives a glimpse of the features of the filesystem library from the C++17 standard.

Introduction to Filesystem Library (C++17)

Introduction to basic file I/O. Demonstrates reading and writing data into text files.

File IO - Part I (Basics)

This lecture shows how to handle errors during file I/O through stream state flags.

File IO - Part II (Error Handling)

Uses file I/O to create a utility that copies text files.

File IO - Part III (Copy Utility)

This video explains the following: 

  1. How to perform character I/O with streams
  2. Jumping to random locations in a file through seek functions
  3. Using std::fstream class to perform I/O on the same file.
File IO - Part IV (Character IO & Seeking)

In this video, we learn how to perform binary input/output operations on files.

File IO - Part V (Binary IO)

Assignment on file copy utility

Assignment I

Additions to the earlier assignment.

Assignment II

File copy utility source files.

File Copy Utility Source

This quiz will test your understanding of file I/O concepts.

File IO
4 questions
19 Lectures 01:29:20

Introduces generic programming through templates. You'll also learn the basic syntax of templates and how to write a function template.

Introduction to Templates

Assignment on basic templates


This video explains 

  1. How template arguments are deduced
  2. How the compiler uses a function template for a particular data type
Template Argument Deduction & Instantiation

Assignment II

Explains what is explicit specialization and why is it required.

Explicit Specialization

Explains the purpose of non-type template arguments. Then, we use this concept to implement efficient algorithms.

Non-type Template Arguments

Source code only.

Source Code

Assignment III

Introduces perfect forwarding, which is a very important concept implemented through R-value references.

Perfect Forwarding - Part I (C++11)

We understand how perfect forwarding preserves type information of template function arguments.

Perfect Forwarding - Part II (C++11)

Gives a gentle introduction to variadic templates. We learn how to write functions that accept arbitrary number of arguments.

Variadic Templates - Part I (C++11)

We take a deep dive into the internals of how variadic templates work.

Variadic Templates - Part II (C++11)

Assignment IV

Here, I'll introduce you to class templates. You'll also learn how to decipher the complex declaration/definition of class member functions.

Class Templates

Just like functions, classes can also be specialized, with a few differences. This video gives a gentle introduction of this concept.

Class Template Explicit Specialization - Part I

In this video, we'll see some more examples of explicit specialization of class templates, that will help you understand and implement specialization easily.

Class Template Explicit Specialization - Part II

Assignment V

Explains the concept of partial specialization of class templates. Also discusses examples of when and where to use it.

Class Template Partial Specialization

We first understand the concept of type definitions & type aliases and then compare them. Then, I explain the concept of type aliases with templates.

Typedef, Type Alias & Alias Templates (C++11)

Test your knowledge & understanding of templates.

8 questions
Lambda Expressions (C++11)
5 Lectures 39:46

Revisits the concepts of function pointers as callbacks.

Callbacks Revisited - Function Pointers

Introduces function objects as callbacks and explains why they're better than function pointers.

Callbacks - Function Objects

Gives a gentle introduction of lambda expressions and shows how they replace function objects. Also explains the optional specifiers and auto return type.

Lambda Expressions

Introduces the capture list.

Lambda Expressions Capture List - Part I

Capture list is explained in depth with default modes.

Lambda Expressions Capture List - Part II

Test your knowledge of callbacks, function objects & lambda expressions.

5 questions
1 More Section
About the Instructor
Umar Lone
4.4 Average rating
138 Reviews
4,984 Students
3 Courses
Trainer, developer & founder at Poash Technologies

Civil engineer who found his calling in software development. Never worked as a Civil engineer, jumped at the first chance and started teaching C++ & Visual C++ 13 years ago. Currently, trains software professionals in various IT companies in India in different technologies, such as C++, Advanced C++, STL, Design Patterns, Android, Unity, Linux, etc. Very passionate about teaching and has trained more than 10,000 software professionals in a teaching career spanning more than 10 years. An avid gamer, currently trying his hand with game development in Unity & Unreal. Has a few Android applications to his credit, including one on Design Patterns.

Only thing he likes more than C++ is Modern C++.