• Professional Development
  • Medicine & Nursing
  • Arts & Crafts
  • Health & Wellbeing
  • Personal Development

Course Images

Complete Modern C++ (C++11/14/17)

Complete Modern C++ (C++11/14/17)

  • 30 Day Money Back Guarantee
  • Completion Certificate
  • 24/7 Technical Support

Highlights

  • On-Demand course

  • 19 hours 42 minutes

  • All levels

Description

This course aims to teach the programming language C++ with an emphasis on the modern features introduced in C++17. The course will cover both old and new concepts in C++, including classes, operator overloading, inheritance, polymorphism, templates, and concurrency. By the end of the course, the students will have gained the knowledge needed to become proficient C++ developers.

In this course, you will explore C++ and get to grips with the modern features introduced in C++17. C++ is a general-purpose programming language developed by Bjarne Stroustrup in 1979, and it is still one of the most popular programming languages used to create high-performance applications across a wide variety of domains and platforms. This course will help you learn C++ as an object-oriented language with modern features, covering both old and new C++ concepts with clear examples. You will start with basic language features that were used to build complex programs, including classes, operator overloading, composition, inheritance, polymorphism, templates, and concurrency. The course will then delve into the assembly to help you understand concepts better. By the end of this course, you will have all the knowledge you need on C++ and its functions to become a proficient C++ developer. The code bundle for this course is available at: https://github.com/PacktPublishing/Complete-Modern-C-Plus-Plus-11-14-17

What You Will Learn

Apply Modern C++ (C++11/14/17) in programs 
Use STL components in your applications 
Write real-world applications in C++ 
Dynamically allocate memory to your C++ program 
Construct classes and objects 
Implement the functions you have learned in your project

Audience

If you are a college student who wants to learn modern C++ or an expert C++ developer who wants to migrate to modern C++, this course is for you. It will also help C++ developers with varying levels of experience to refresh their knowledge of C++ basics and get acquainted with the new features. Anyone comfortable with languages such as C, Java, C#, and Python will find this course useful in order to learn and apply modern C++.

Approach

This is a hands-on course that covers modern C++ concepts and C++11, 14, and 17 features.

Github Repo

https://github.com/PacktPublishing/Complete-Modern-C-Plus-Plus-11-14-17

About the Author
Umar Lone

Umar Lone is a civil engineer who found his calling in software development. He started teaching C++ and Visual C++ 15 years ago. Currently, he trains software professionals in various software companies in India in different technologies, such as modern C++, advanced C++, STL, design patterns, Android, Unity, Linux, and more. He is extremely passionate about teaching and has trained more than 20,000 software professionals. An avid gamer, Umar is currently trying his hand at game development in Unity and Unreal. He has a few Android applications to his credit, including one on design patterns. The only thing he likes more than C++ is Modern C++.

Course Outline

1. Start Here

1. Introduction

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

2. Visual Studio 2015 Installation (Deprecated)

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

3. Visual Studio 2017 Installation (Deprecated)

In this video, you will learn how to install Visual Studio 2017 and how to create a C++ project. A few differences between VS2015 and VS 2017 in the project creation dialogs are also explained.

4. Visual Studio 2019 Installation

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

5. Code::Blocks Installation

This video explains how to install Code::Blocks and configure it with a separate build of MingW on Windows.

6. Cevelop Installation

This video explains how to install Cevelop. Cevelop is an enhanced version of Eclipse CDT and focuses on modern C++ development. We will also demonstrate how to create a project in Cevelop and how to add new classes to the existing project.

7. XCode Installation on MacOS

In this video, the author shows you how to download, install, and use XCode on macOS to create C++ programs.

2. Basic Language Facilities

1. What Is C++?

In this video, we will introduce you to modern C++ and where it is used. We will also understand why C++ is chosen over other languages.

2. First C++ Program

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

3. The C++ Compilation Process

This video explains the C++ build process in detail.

4. Primitive Types and Variables

This video introduces primitive types in C++.

5. Basic Input/Output

This video gives an overview of basic input/output classes and demonstrates how to write on the console and read from the keyboard.

6. Functions Basics - Part I

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

7. Functions Basics - Part II

This video discusses the concept of function declaration and definition. We will see some more examples of functions.

8. Overview of Debugging in Visual Studio

This video gives a gentle introduction to debugging C++ applications in Visual Studio and explains a few common shortcuts.

9. Uniform Initialization (C++11)

In this video, you will learn about different types of initializations in C++, including the new Uniform initialization syntax and its advantages.

10. Pointers

This video introduces pointers, syntax, and their usage.

11. Reference

This video explains reference type and how to use it instead of pointers.

12. Reference Versus Pointer

This video compares pointers and references and explains how to choose between them.

13. The const Qualifier

This video explains the importance of the const qualifier and its usage.

14. The const Qualifier and Compound Types

This video explains how to use the const qualifier with pointers and references.

15. Automatic Type Inference (C++11)

This video introduces the auto keyword and explains how to use it to infer types automatically.

16. Range-Based For Loop - I (C++11)

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

17. Range-Based For Loop - II (C++11)

In this video, you will understand how the range-based for loop works internally.

18. Function Overloading

This video explains function overloading and how to use it.

19. Default Function Arguments

This video explains syntax and usage.

20. Inline Functions

This video explains how to increase the performance of your code by making your functions inline.

21. Function Pointers

This video introduces function pointers and explains their purpose.

22. Namespace

This video explains how to use namespaces to group types together and avoid name clashes.

3. Memory Management - Part I

1. Dynamic Memory Allocation - Part I (malloc Function)

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

2. Dynamic Memory Allocation - Part II (New Operator)

In this video, you will learn how to use the new operator to allocate memory at runtime in C++. You will also learn why the new operator is preferred over malloc in C++.

3. Dynamic Memory Allocation - Part III (new[] Operator)

This video explains how to create arrays on heap using the new[] operator. You will also learn how to create strings on a heap in C++.

4. Dynamic Memory Allocation - Part IV (2D Arrays)

This video shows the basics of 2D arrays and how they are created on the heap in C++ using the new[] operator.

4. Classes and Objects

1. Object-Oriented Programming Basics

This video gives an overview of object-oriented programming principles and how they relate to real-life objects.

2. Class

This video explains the meaning and syntax of class.

3. Constructor and Destructor

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

4. Structures

This video explains the meaning and purpose of structures in C++.

5. Non-Static Data Member Initializers (C++11)

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

6. this Pointer

This video explains this pointer and its purpose.

7. Constant Member Functions

This video explains how to create read-only functions through the const qualifier.

8. Static Class Members

This video explains how to use the static keyword to create static member variables and functions.

9. Copy Constructor - Part I

This video explains the copy constructor and why it is required.

10. Copy Constructor - Part II

This video explains how and when to implement a user-defined copy constructor. It also explains the rule of 3.

11. Delegating Constructors (C++11)

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

12. Default and Deleted Functions (C++11)

This video explains how to use the C++11 keywords-default and delete-to control what functions are synthesized by the compiler.

5. Move Semantics

1. Value Categories

In this video, you will learn about L-value and R-value.

2. Move Semantics - Basics (C++11)

This video explains the concept of move semantics and how it improves performance.

3. Move Semantics - Implementation (C++11)

This video Shows how to implement move semantics in a class.

4. Rule of 5 and 0

In this video, you will learn about the Rule of 5 and 0. You will also understand in which cases the class functions are automatically synthesized by the compiler.

5. Copy Elision

In this video, you will learn about copy elision and how it eliminates extra copies of temporary objects.

6. std::move Function

In this video, you will learn how to use std::move function to force move semantics on l-value.

6. Operator Overloading

1. Operator Overloading - Part I (Basics)

This video explains the basics of operator overloading and implementation of common unary and binary operators.

2. Operator Overloading - Part II (Assignment Operator)

This video explains why the assignment operator is important.

3. Operator Overloading - Part III (Global Overloads)

This video shows when operators need to be overloaded as global functions.

4. Operator Overloading - Part IV (Friend Keyword)

This video explains the purpose of the friend keyword and when and where to use it.

5. Operator Overloading - Part V (Smart Pointer Basics)

This video explains the RAII idiom.

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

This video demonstrates the smart pointers in C++11.

7. Operator Overloading - Part VII (Rules)

This video is a short discussion on the operator overloading rules.

8. Type Conversions - Part I (Basics)

This video discusses conversion between types using C++ casting operators.

9. Type Conversions - Part II (Primitive to User Type)

This video is an explanation and implementation of how constructors are used by the compiler to perform type conversion.

10. Type Conversions - Part III (User to Primitive Type)

This video explains how to implement type conversion operator function to convert a user-defined type into primitive type.

11. Type Conversions - Part IV (User Defined to User Defined)

This video explains how to use the type conversion operator to perform conversions between different user defined types.

12. Initialization Versus Assignment and Member Initialization List

This video explains why initialization should be preferred over assignment. It also explains the concept of member initializer list.

7. Memory Management - Part II

1. Raw Pointers

In this video, we will explain why we need smart pointers.

2. std::unique_ptr

In this video, you will learn about the unique_ptr and its properties.

3. Sharing Pointers

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

4. Sharing std::unique_ptr

In this video, we will try to share the pointer resource using unique_ptr and find out if it works.

5. std::shared_ptr

As unique_ptr cannot be used for sharing the underlying resource, we will 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 video.

6. Weak Ownership

In this video, we will look at a problem with shared_ptr while using a resource that may be destroyed anytime.

7. std::weak_ptr Internals

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

8. Circular References

In this video, you will learn about circular references and how using shared_ptr may lead to memory leaks. Finally, we will use weak_ptr to prevent memory leaks.

9. Deleter

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 video explains the concept and its usage.

10. Dynamic Arrays

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

11. Make Functions

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

8. More C++ Goodies

1. Enums - Part I (Basics)

This video explains the purpose of enumerated types and when to use them.

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

This video shows the implementation of scoped enums.

3. Strings - Part I (Raw Strings)

This video demonstrates raw strings and their usage.

4. Strings - Part II (std::string)

This video introduces the std::string class from the standard library and its usage.

5. Strings - Part III (String Streams)

This video explains string streams and their purpose.

6. User-Defined Literals

This video demonstrates how to create user-defined literals for your own types.

7. Constant Expressions - constexpr (C++11)

In this video, you will learn how to write expressions that can be evaluated at compile time, thereby increasing the performance of your code.

8. std::initializer_list (C++11)

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

9. Dynamic Array (std::vector)

This video introduces the std::vector class and demonstrates common operations of creation, insertion, deletion, and so on.

10. Union - I

This video explains the basics of unions and how to use them.

11. Union - II

In this video, we will see the caveats of using user-defined types as members in a union.

9. Object-Oriented Programming

1. Inheritance and Composition

In this video, we will revisit inheritance and composition and explain it again with examples.

2. Inheritance and Access Modifiers

This video explains access modifiers in the context of inheritance.

3. Project - Part I (Beginning)

This video explains the project on inheritance.

4. Project - Part II (Account and Savings Implementation)

This video shows implementation of the Account hierarchy.

5. Project - Part III (Inheriting Constructors)

This video implements the Checking class and shows how to invoke the base class member functions from the child classes.

6. Project - Part IV (Virtual Keyword)

This video introduces the virtual keyword and why it is needed.

7. Project - Part V (Virtual Mechanism Internals - I)

This video explains the underlying implementation of virtual mechanisms.

8. Project - Part VI (Virtual Mechanism Internals - II)

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.

9. Project - Part VII (override and final specifier)

This video explains the purpose of override and final specifier.

10. Project - Part VIII (Object Slicing)

This video is a discussion on upcasting and downcasting within the objects of a class hierarchy. You will also learn about object slicing and how to avoid it.

11. Project - Part IX (typeid Operator)

This video explains the concepts of runtime type information and introduces the typeid operator.

12. Project - Part X (dynamic_ cast Operator)

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

13. Abstract Class

In this video, understand the concept of pure virtual functions and the abstract classes and learn when and where to use them.

14. Multiple (Diamond) Inheritance

This video explains the issue that arises with diamond inheritance.

10. Exception Handling

1. Exception Handling - Part I (Basics)

This video explains why exception handling is required and how it is better than returning simple error codes.

2. Exception Handling - Part II (Multiple Catch Blocks)

This video explains more details on catch blocks. Learn how to write multiple catch blocks, how to use base exception object in a catch block, and also cover all catch blocks.

3. Exception Handling - Part III (Stack Unwinding)

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

4. Exception Handling - Part IV (Nested Exceptions)

This video explains the concept of nested exception handling and demonstrates its usage with an example.

5. Exception Handling - Part V (Constructor and Destructor)

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

6. Exception Handling - Part VI (noexcept Keyword in C++11)

This video introduces the noexcept keyword and you will learn its purpose and where it should be used.

11. File Input and Output

1. Raw String Literals (C++11)

This video introduces the C++11 raw string literals and explains their purpose and usage.

2. Introduction to Filesystem Library (C++17)

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

3. File IO - Part I (Basics)

This video demonstrates reading and writing of data into text files.

4. File IO - Part II (Error Handling)

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

5. File IO - Part III (Copy Utility)

This video uses file I/O to create a utility that copies text files.

6. File IO - Part IV (Character IO and Seeking)

This video explains how to perform character I/O with streams.

7. File IO - Part V (Binary IO)

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

12. Templates

1. Introduction to Templates

This video introduces generic programming through templates.

2. Template Argument Deduction and Instantiation

This video explains how template arguments are deduced.

3. Explicit Specialization

This video explains what explicit specialization is and why it is required.

4. Non-type Template Arguments

This video explains the purpose of non-type template arguments.

5. Perfect Forwarding - Part I (C++11)

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

6. Perfect Forwarding - Part II (C++11)

In this video, we will understand how perfect forwarding preserves type information of template function arguments.

7. Variadic Templates - Part I (C++11)

This video gives a gentle introduction to variadic templates.

8. Variadic Templates - Part II (C++11)

In this video, we will take a deep dive into the internals of how variadic templates work.

9. Class Templates

This video introduces you to class templates. You will also learn how to decipher the complex declaration/definition of class member functions.

10. Class Template Explicit Specialization - Part I

This video gives a gentle introduction of class specialization, with a few differences.

11. Class Template Explicit Specialization - Part II

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

12. Class Template Partial Specialization

This video explains the concept of partial specialization of class templates, and also discusses examples of when and where to use it.

13. Typedef, Type Alias, and Alias Templates (C++11)

In this video, understand the concept of type definitions and type aliases and then compare them. It also explains the concept of type aliases with templates.

14. Type Traits (C++11)

Type traits allow introspection of types at compile-time and is a very powerful feature. This video shows you a few type traits and how to use them.

15. static_assert (C++11)

static_assert can perform a compile-time assertion. This video shows how to use it.

13. Lambda Expressions (C++11)

1. Callbacks Revisited - Function Pointers

This video revisits the concepts of function pointers as callbacks.

2. Callbacks - Function Objects

This video introduces function objects as callbacks and explains why they are better than function pointers.

3. Lambda Expressions

This video gives a gentle introduction of lambda expressions and shows how they replace function objects. It also explains the optional specifiers and auto return type.

4. Lambda Expressions - Internals

This video shows you how lambda expressions are implemented internally.

5. Lambda Expressions Capture List - Part I

This video introduces the capture list.

6. Lambda Expressions Capture List - Part II

In this video, capture list is explained in-depth with default modes.

7. Lambda Expressions Capture List - Part III

This video discusses how to capture class members through this pointer.

8. Generalized Lambda Capture

This video gives an overview on generalized lambda capture.

14. Standard Template Library

1. Introduction

This video introduces the components of the STL.

2. std::array (C++11)

In this video, learn the features of std::array and compare it with in-built static arrays.

3. std::vector

In this video, understand how to use a vector as a dynamic array.

4. std::deque

In this video, learn what a double-ended queue is and what are its features.

5. std::list and std::forward_list (C++11)

This video explains the std::forward_list that was introduced in C++11.

6. std::set and std::multiset

In this video, learn about their features and understand how to use them.

7. std::map and std::multimap

In this video, learn about the features of these classes and how to use them.

8. Unordered Containers (C++11) - I

Unordered containers were added in C++11. This video explains their internal structure.

9. Unordered Containers (C++11) - II

This video demonstrates the usage of unordered containers.

10. std::hash (C++11)

This video demonstrates how to write a custom hash function and equality function object for unordered containers.

11. Big O Notation and Performance of Containers

In this video, we will explain the Big-O notation and how that is used to gauge performance of common operations of containers and algorithms.

12. Algorithms - Part I

This video is an introduction to common algorithms.

13. Algorithms - Part II

This video demonstrates how common algorithms can be customized with functions objects and lambda expressions.

15. C++ Concurrency

1. Concurrency Basics

This video explains why concurrency is required with an example of a console and user-interface application.

2. Thread Creation (std::thread)

In this video, you will learn how to use the std::thread class to create a thread.

3. Passing Arguments to Threads

In this video, learn how to pass arguments to thread functions.

4. Thread Synchronization (std::mutex)

This video explains what happens when data is shared between threads.

5. std::lock_guard

In this video, you will learn why lock_guard class is important and how to use it with mutex.

6. std::thread Functions and std::this_thread Namespace

This video explains other functions of the thread class.

7. Task-Based Concurrency - Part I

This video introduces the std::async function that is used for task-based concurrency.

8. Task-Based Concurrency - Part II

This video explains std::async in more depth.

9. Launch Policies

In this video, understand what launch policies are and how to use them in std::async.

10. std::future Wait Functions

In this video, understand the different types of wait functions provided by std::future and how to use them.

11. Using std::promise

This video explains std::promise in depth and how to use it to pass data between threads with explicit synchronization.

12. Propagating Exceptions Across Threads

This video demonstrates how std::promise allows propagating exceptions across threads easily, without any effort on the part of the programmer.

16. C++17 Core Language Features

1. Deprecated and Removed Features

This video explains which features were removed in C++17 standard.

2. Changes

In this video, learn about those changes.

3. Attributes

In this video, learn about the attributes added to C++11, C++14, and C++17 and how they can be used in code.

4. Feature Test Macros

This video introduces the __has_include macro to test for the existence of a header file.

5. If and switch with Initialization

In this video, learn how you can perform initialization in if/switch conditions.

6. Inline Variables

In this video, learn how to use inline variables at global and class scope.

7. Nested Namespaces

In this video, learn about this convenient feature of namespaces that simplifies the syntax of creating nested namespaces.

8. noexcept

In this video, understand why noexcept is part of the function type in C++17.

9. constexpr Lambda

In this video, learn about the changes in lambda expressions in C++17.

10. Structured Bindings

In this video, understand how to use structured bindings to bind variables to different members of an object or an array.

11. Expression Evaluation Order

In this video, learn and understand the issues with unspecified expression evaluation order and how C++17 fixes it.

12. Mandatory Copy Elision - I

This video builds up the base to understand mandatory copy elision. It shows the limitation of copy elision in pre-C++17 standards.

13. Mandatory Copy Elision - II

This video explains mandatory copy elision introduced in C++17. Even without copy and move constructors, you can initialize objects with R-values.

17. C++17 Template Features

1. Compiled Time Argument Deduction (CTAD)

In this video, understand and use CTAD to simplify the construction syntax of class templates.

2. Folding Basics

In this video, we will understand the concept of folding and how variadic function templates can be used to implement it.

3. Fold Expressions - Unary Folds

In this video, we will see how to perform unary folds.

4. Fold Expressions - Binary Folds

This video demonstrates how to use binary folds.

5. Fold Expressions - Recap

In this video, the author shows you how variadic templates and fold expressions are expanded by the compiler.

6. Type Traits Suffixes

C++14 and C++17 added suffixes to type traits to simplify their usage. Learn how to use these suffixes in this video. Note: Watch video 12.14 for an introduction to type traits.

7. if constexpr - I

In this video, understand how compile time (if constexpr) performs conditional checks at compile time, thereby improving the performance of your code.

8. if constexpr - II

This video shows the internals of how the conditional statements are discarded with compile time of expressions.

18. C++17 Standard Library Components

1. std::optional - I

This video explains the basics of how to use std::optional.

2. std::optional - II

In this video, understand how to use std::optional to represent return type of functions that may not return a value every time.

3. std::optional - III

This video explains how to std::optional as a member variable of a class.

4. std::variant - I

In this video, you will learn what a variant is and how it is better than a union.

5. std::variant - II

In this video, we will examine the construction and initialization of variant members in depth.

6. std::variant - III

In this video, you will learn how to use the visitor to read or modify active members in a variant.

7. std::any

In this video, learn how to use std::any to store arbitrary types with type safety.

8. std::string_view - I

In this video, learn and understand the basics of the std::string_view class.

9. std::string_view - II

In this video, you will understand the different situations where std::string_view should be and should not be used.

10. Filesystem - path

This video introduces filesystem library components.

11. Filesystem - directory_entry

In this video, you will understand the usage of the directory_entry class.

12. Filesystem - Directory Functions

This video demonstrates the usage of directory manipulation functions for operations.

13. Filesystem - Permissions

In this video, you will learn how to get and set permissions on files in Windows and Linux.

14. Parallel Algorithms - I

In this video, we will get introduced to the parallel algorithms introduced in C++17.

15. Parallel Algorithms - II

This video demonstrates the usage of parallel algorithms and how they can improve the performance of your code.

16. Parallel Algorithms - III

This video explains why parallel algorithms cannot be used everywhere.

Course Content

  1. Complete Modern C++ (C++11/14/17)

About The Provider

Packt
Packt
Birmingham
Founded in 2004 in Birmingham, UK, Packt’s mission is to help the world put software to work in new ways, through the delivery of effective learning and i...
Read more about Packt

Tags

Reviews