We may earn an affiliate commission when you visit our partners.
Take this course
Umar Lone

Learn C++ in depth with modern features introduced with C++11/14/17

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.

Read more

Learn C++ in depth with modern features introduced with C++11/14/17

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 ones. C++17 released in 2017 added 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

  1. You have never programmed before

  2. You don't know ANY programming language

  3. 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.

Update [April 11, 2020] : Added content on copy elision, type traits, static_assert & generalized lambda capture, C++11 unions

Update [Mar 25, 2020]: XCode installation & high-level concurrency (std::async)

Update [Mar 1, 2019] : More videos added for memory management with smart pointers (shared_ptr, unique_ptr, weak_ptr_)

Update [Oct 19, 2017] :Instructions added for installing Visual Studio Community 2017, Cevelop (Eclipse) & Code::Blocks

Update [Sep 29, 2107] : Added more content on dynamic memory allocation (malloc, new[], 2D arrays, strings)

Update [Sep 16, 2017] : C++ concurrency (std::thread, std::mutex, etc)

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

Enroll now

What's inside

Learning objectives

  • 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

Syllabus

Prepare and install Visual Studio 2015 Community edition for writing C++ programs

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

Read more

Source code of examples

A note on different C++ compilers

This lecture shows the installation process of Visual Studio 2015 for C++ programming. Prefer installing Visual Studio 2019 instead.

In this video, you 'll learn how to install Visual Studio 2017 and also how to create a C++ project. I also explain a few differences between VS2015 & VS 2017 in the project creation dialogs.

This video explains how to install VIsual Studio 2019 & the steps for creating a C++ project.

[UPDATE] A new version of Code::Blocks was recently released. The MingW compiler bundled now supports all C++11/14 features, however, some C++17 features may be missing. If you don't care about C++17 now, just download the entire package with compiler. Otherwise, follow the instructions in the video & install the compiler separately.

In this video,I'll explain how to install Code::Blocks and configure it with a separate build of MingW on Windows.

In this video, I'll explain how to install Cevelop. Cevelop is an enhanced version of Eclipse CDT and focuses on modern C++ development.

I'll also demonstrate how to create a project in Cevelop and how to add new classes to existing project.

Note: To run Cevelop, you'll have to install Java runtime & a GNU-based C++ compiler. You can download Java from www.java.com and MinGW from mingw.org.

In this lecture, I'll show you how to download, install and use XCode on MacOS for creating C++ programs

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

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

Explains the C++ build process in detail.

Introduces primitive types in C++.

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

This lecture explains the basics of functions in C++.

I'll discuss the concept of function declaration & definition. And we'll see some more examples of functions.

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

Learn about different types of initialization in C++ including the new Uniform Initialization syntax and its advantages

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

Explains the importance of const qualifier and its usage.

Explains how to use const qualifier with pointers and references.

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.

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

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

In this lecture, you'll understand how the range-based for loop works internally.

Explains function overloading and how to use it

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

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

Note: The option of forcing inlining no longer works in newer versions of Visual Studio. To see inlined function disassembly, simply build your project in Release configuration.

Introduces function pointers and explains their purpose.

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

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

Explains basics of dynamic memory allocation in C. This will build up a base for understanding dynamic memory allocation in C++.

Learn how to use the new operator to allocate memory at runtime in C++. You'll also learn why new operator is preferred over malloc in C++.

This lecture explains how to create arrays on heap using new [] operator. You'll also learn how to create strings on heap in C++.

Learn the basics of 2D arrays and how they're created on the heap in C++ using the new[] operator.

Source code only

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

Explains the meaning and syntax of class

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

Explains the meaning and purpose of structures in C++

Explains this C++11 feature and shows how to use it to initialize class members directly inside a class.

Explains this pointer and its purpose

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

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

Explains the copy constructor and why it is required

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

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

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

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

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

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

Shows how to implement move semantics in a class.

Learn about the Rule of 5 & 0. Also understand in which cases the class functions are automatically synthesized by the compiler.

Learn about copy elision and how it eliminates extra copies of temporary objects.

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

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

Contains source code only.

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

Explains why assignment operator is important

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

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

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

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

Go to Section 6 for in-depth explanation of C++11 smart pointers.

A short discussion on the operator overloading rules.

Discussion on conversion between types using C++ casting operators

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

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

In this video, I explain how to use the type conversion operator to perform conversions between different user defined types.

Explains why initialization should be preferred over assignment. Also explains the concept of member initializer list.

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

In this lecture, I'll explain why we need smart pointers.

You'll learn about the unique_ptr and its properties in this video.

In this lesson, I'll build an example that will be used to explain why we std::unique_ptr cannot be used in all cases.

I'll try to share the pointer resource using unique_ptr and find out if it works.

Since unique_ptr cannot be used for sharing the underlying resource, I'll replace it with shared_ptr. A shared_ptr allows sharing of the underlying resource and it manages this information through a reference count. Learn how it works in this lecture.

We'll look at a problem with shared_ptr while using a resource that may be destroyed anytime.

Continuing from the previous lecture, you'll learn how weak_ptr can be used to weakly point to a resource without preventing it from getting destroyed. You'll also understand how it achieves this behavior.

In this lecture, we'll learn about circular references and how using shared_ptr may lead to memory leaks. Finally, we'll use weak_ptr to prevent memory leaks.

We can store any kind of resource in a smart pointer, but it needs to be released correctly. This can be done through a deleter. This lesson explains the concept and its usage.

This lesson explains how we can use smart pointers to manage pointers to dynamic arrays.

The construction process of a smart pointer can be simplified with std::make_ functions. You'll learn about these functions in this lesson.

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

Implementation of scoped enums.

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

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

Assignment on string conversion.

Traffic lights

Read about what's good
what should give you pause
and possible dealbreakers
Covers modern C++ features introduced in C++11/14/17, which are essential for writing efficient and up-to-date code
Explores assembly to deepen the understanding of certain concepts, which can be valuable for optimizing performance-critical applications
Teaches object-oriented programming concepts in C++, including classes, operator overloading, composition, inheritance, and polymorphism, which are fundamental for software design
Includes quizzes after each section to test understanding, which reinforces learning and helps identify areas for improvement
Requires prior programming experience, so learners without a basic understanding of programming may find the course challenging
Uses Visual Studio 2015 in some installation videos, but encourages learners to install Visual Studio 2019 instead, which may cause confusion

Save this course

Create your own learning path. Save this course to your list so you can find it easily later.
Save

Reviews summary

In-depth modern c++ (c++11/14/17)

Learners say this course provides a comprehensive and in-depth exploration of Modern C++ features, specifically covering C++11, C++14, and C++17 standards. Many students praise the instructor's clear and detailed explanations, which make complex topics like move semantics, smart pointers, templates, and concurrency accessible. The course includes practical coding examples and demos that help solidify understanding. While students find the content challenging and demanding, they consistently describe it as highly rewarding and valuable for mastering these advanced concepts. A key point raised is that the course is strictly for those with prior programming knowledge and is not suitable for absolute beginners, as explicitly stated in the course description. Reviewers also appreciate the instructor's commitment to updating the course content.
Demanding course requires focus.
"This is a challenging course and requires dedicated effort, but it's incredibly rewarding if you put in the work."
"Be prepared for dense material; it's a deep dive, not a superficial overview."
"Some topics are quite advanced and require careful attention and practice to fully grasp."
"It pushes you to think critically about C++ features."
Prior programming knowledge essential.
"As the course description warns, this is definitely not for programming beginners. You need solid programming fundamentals before starting this."
"If you don't have prior programming experience, you will likely struggle with the pace and depth of this course."
"Came into this with some programming background, which was absolutely necessary. It builds on existing knowledge."
"This course assumes you already know the basics of programming and C syntax; it jumps right into more advanced C++ features."
Instructor keeps content updated (C++17).
"It's great that the instructor keeps updating the course with newer C++ features like those from C++17."
"I noticed updates mentioned in the course materials, showing it's actively maintained."
"Appreciated the addition of C++17 topics, making the course feel current."
"The course seems to evolve with the language standards, which is a major plus."
Helpful coding examples reinforce learning.
"The coding examples are very well-chosen and help illustrate the concepts taught in the lectures effectively."
"I appreciated the hands-on coding demos; they make it easier to see how the features are applied in practice."
"The examples provided for each topic were practical and helped me understand the code better."
"Working through the code examples solidified my understanding."
Instructor explains complex ideas clearly.
"The instructor does an excellent job of explaining complex concepts clearly. He breaks down difficult topics into manageable parts."
"His explanations are crystal clear and easy to follow, even for someone new to these specific modern C++ features."
"I found the lectures to be very well-structured and the delivery made even advanced topics understandable."
"The instructor has a knack for simplifying intricate C++ concepts."
Explores C++11/14/17 features deeply.
"This course covers modern C++ quite extensively. I learned a lot about features introduced since C++11 that I wasn't previously familiar with, like move semantics and smart pointers..."
"The sections on templates, concurrency, and the new C++17 features were particularly insightful and covered in significant detail."
"It dives deep into essential modern concepts like move semantics and smart pointers, which are crucial for writing efficient C++ code."
"I appreciated the thorough explanations of C++14 and C++17 additions; it feels very up-to-date."

Activities

Be better prepared before your course. Deepen your understanding during and after it. Supplement your coursework and achieve mastery of the topics covered in Complete Modern C++ (C++11/14/17) with these activities:
Review Object-Oriented Programming (OOP) Concepts
Solidify your understanding of OOP principles before diving into C++ classes and inheritance. This will make grasping C++'s object-oriented features much easier.
Show steps
  • Review the core principles of OOP.
  • Practice implementing OOP concepts in another language.
Review 'Effective Modern C++'
Supplement your learning with a detailed guide to modern C++ practices. This book provides valuable insights beyond the course material.
Show steps
  • Read a chapter related to the current course topic.
  • Try out the examples in the book.
  • Compare the book's explanations with the course's.
Review 'C++ Concurrency in Action'
Deepen your understanding of C++ concurrency with a dedicated resource. This book expands on the course's concurrency topics.
Show steps
  • Read a chapter on a specific concurrency topic.
  • Implement the examples from the book.
  • Experiment with different concurrency patterns.
Four other activities
Expand to see all activities and additional details
Show all seven activities
Create a C++17 Feature Showcase
Solidify your understanding of C++17 features by creating a presentation or blog post showcasing their usage and benefits. This will help you internalize the concepts and explain them to others.
Show steps
  • Choose 3-5 C++17 features to showcase.
  • Write code examples demonstrating each feature.
  • Create a presentation or blog post explaining the features and examples.
Implement Data Structures with Smart Pointers
Reinforce your understanding of smart pointers by implementing common data structures like linked lists, trees, and graphs using `unique_ptr`, `shared_ptr`, and `weak_ptr`.
Show steps
  • Choose a data structure to implement.
  • Design the data structure using smart pointers.
  • Implement the data structure and test it thoroughly.
Contribute to a C++ Open Source Project
Apply your C++ skills by contributing to an open-source project. This will provide valuable real-world experience and expose you to different coding styles and project structures.
Show steps
  • Find a C++ open-source project that interests you.
  • Identify a bug or feature to work on.
  • Submit a pull request with your changes.
Build a Simple Game Engine
Consolidate your C++ knowledge by building a simple game engine. This project will require you to apply various concepts learned in the course, such as classes, inheritance, polymorphism, templates, and memory management.
Show steps
  • Design the architecture of the game engine.
  • Implement the core components, such as rendering, input, and physics.
  • Create a simple game using your game engine.

Career center

Learners who complete Complete Modern C++ (C++11/14/17) will develop knowledge and skills that may be useful to these careers:
Game Programmer
A Game Programmer uses C++ to develop the core logic and systems for video games, including gameplay mechanics, rendering, and physics. This course is particularly beneficial because it covers modern C++ features, such as move semantics and concurrency, which are essential for building high-performance game engines. Game development often requires advanced memory management skills, a topic heavily featured in this course. The course will also help programmers understand how to write efficient code using templates and the Standard Template Library, which is frequently used in game development.
Systems Programmer
As a Systems Programmer, you would be creating operating systems, device drivers, and other low-level software, often in C++. This course covers concepts crucial for systems programming, including memory management using smart pointers, and concurrency, which are features that allow for efficient resource utilization and parallel execution, respectively. The course teaches you how to build complex programs from primitive building blocks, and the course emphasis on understanding the underlying assembly will enable you to work at the systems level.
High Frequency Trading Software Engineer
High Frequency Trading Software Engineer roles use C++ to develop and maintain trading platforms that require speed and performance. This course teaches the modern C++ constructs that are critical for writing the most computationally efficient code possible. The course also covers multithreading, which is key in parallelizing computations to optimize the speed of trading algorithms. This course will also help in understanding operator overloading to write concise and readable numerical or financial code.
Embedded Systems Engineer
An Embedded Systems Engineer develops firmware for devices that have their own dedicated computing systems, often using C++. This course is helpful, because it provides a deep dive into manual memory management and smart pointers, which are crucial for resource constrained environments in embedded systems. Furthermore, the course's focus on optimizing performance by using features such as move semantics and inline functions makes it very suitable for an embedded systems engineer. This background helps in writing efficient code that maximizes performance on these kinds of platforms.
Robotics Engineer
Robotics Engineers frequently use C++ to program complex robot control systems. This course helps build a foundation in the modern C++ features required to develop efficient algorithms for robot navigation and control. The course covers concurrency and threading, which is essential in multi-part robot systems that need to perform multiple actions. Also, the course's thorough treatment of memory management techniques, ensures a Robotics Engineer can write reliable code that minimizes memory leaks and ensures correct resource handling.
Compiler Developer
A Compiler Developer focuses on the design and implementation of compilers, often requiring expertise in C++. This course provides instruction on C++'s core language features, memory management, and object-oriented concepts, all of which are very helpful in understanding and manipulating the structure of source code. Furthermore, the course helps to demystify the behavior of the language itself, including how types are handled and how templates function, which is particularly helpful in creating programming tools.
Quantitative Analyst
A Quantitative Analyst utilizes C++ to build high-performance models for financial analysis and trading. This is a field that often uses C++ to develop algorithms that require speed and efficiency. This course covers modern C++ concepts, such as move semantics and concurrency, which are helpful for optimizing performance. The course's deep dive into memory management is also helpful for developing robust and efficient models.
Graphics Programmer
A Graphics Programmer develops software for rendering graphics for a variety of outputs. This field uses C++ to produce high performance graphics engines. The course will help you write well-structured code. As the course also deals with the Standard Template Library, you'll find yourself more comfortable and more fluent in C++ code that uses this library. The course's treatment of memory management, including dynamic allocation, and smart pointers, will be very helpful.
Algorithm Developer
An Algorithm Developer designs and implements algorithms for various applications that often require speed and efficiency, and C++ is a language that can be used for this purpose. This course may be helpful because it covers modern C++ features such as move semantics and templates, which are helpful when optimizing performance-critical code and writing generalizable algorithms. The course's coverage of the Standard Template Library and memory management may further help you in developing robust and efficient implementations of algorithms.
Database Developer
Database Developers will use their knowledge of C++ to enhance database systems, which often require C++ for performance and efficiency. The course helps make you fluent in C++, such that you will be able to build or maintain core database engines for a range of data related tasks. The course's coverage of memory management, concurrency, as well as object oriented programming techniques, may help in developing reliable, high-performance database applications.
Software Development Engineer
A Software Development Engineer uses languages like C++ to build software applications for many fields and purposes. This course may be useful because it gives a solid foundation in C++ programming and the principles of object-oriented design and usage of the Standard Template Library. The course aims to teach you how to write applications in C++ and may help you build useful and maintainable software systems. The course emphasis on concurrency will help you build multi-threaded applications for better performance.
Software Architect
Software Architects design the high-level structure of software systems, and a background in C++ can be advantageous. This course may be helpful because it provides an in-depth look at object-oriented programming in C++, with focus on templates and the Standard Template Library, all of which are helpful in designing well-structured and maintainable software. The course's discussions on memory management may help you understand how to build efficient systems that minimize memory leaks, along with the use of concurrency and threading.
Scientific Computing Programmer
Scientific Computing Programmers develop software for scientific simulations and data analysis. This course may help you to write software that has high computational requirements. The course will teach you to use C++ constructs to write performant and efficient code, and the course's focus on templates and the Standard Template Library, may be particularly useful in creating generalizable modules for scientific applications. The course coverage of memory management and concurrency is also helpful in handling large datasets and computations.
Performance Engineer
Performance Engineers analyze and improve the runtime efficiency of software applications. This course may help you analyze performance bottlenecks in software systems written in C++. The course's coverage of memory management, concurrency, and modern C++ features such as move semantics and inline functions, may be useful when optimizing code performance. The course emphasis on understanding assembly can be very helpful in understanding low-level code performance characteristics.
Software Tester
Software Testers ensure the quality of software by identifying defects. The techniques learned in this course may help a Software Tester better understand how software is constructed, which will enable them to approach testing with a knowledge of how modern C++ programs behave. Concepts such as memory management, operator overloading, and multithreading that are taught in this course will help when analyzing and testing complex software systems.

Featured in The Course Notes

This course is mentioned in our blog, The Course Notes. Read one article that features Complete Modern C++ (C++11/14/17):

Reading list

We've selected two books that we think will supplement your learning. Use these to develop background knowledge, enrich your coursework, and gain a deeper understanding of the topics covered in Complete Modern C++ (C++11/14/17).
Must-read for anyone serious about modern C++. It provides in-depth explanations of C++11, C++14, and C++17 features, along with practical advice on how to use them effectively. It serves as an excellent companion to the course, offering deeper insights and best practices. This book is commonly used by industry professionals.
Provides a comprehensive guide to writing concurrent and multithreaded applications in C++. It covers topics such as threads, mutexes, condition variables, and atomic operations. It is particularly useful for understanding the concurrency features introduced in C++11 and later. This book is commonly used by industry professionals.

Share

Help others find this course page by sharing it with your friends and followers:

Similar courses

Similar courses are unavailable at this time. Please try again later.
Our mission

OpenCourser helps millions of learners each year. People visit us to learn workspace skills, ace their exams, and nurture their curiosity.

Our extensive catalog contains over 50,000 courses and twice as many books. Browse by search, by topic, or even by career interests. We'll match you to the right resources quickly.

Find this site helpful? Tell a friend about us.

Affiliate disclosure

We're supported by our community of learners. When you purchase or subscribe to courses and programs or purchase books, we may earn a commission from our partners.

Your purchases help us maintain our catalog and keep our servers humming without ads.

Thank you for supporting OpenCourser.

© 2016 - 2025 OpenCourser