C++ Fundamentals: Grasp the core concepts including variables, data types, arithmetic operations, and basic I/O.
Design Your Own Types: Learn the art of defining custom types using classes, structures, unions, and enumerations.
Understanding Modularity: Organize and structure your code effectively using namespaces, source files, and headers. Introduction to C++20 Modules feature.
Dive into OOP: Get introduced to the world of Object-Oriented Programming in C++ and understand classes, constructors, member functions, and overloading.
Understand Essential Operations: Demystify copy and move semantics and lay the foundation for the Rule of Three/Five.
Harness the Power of Templates: Delve into generic programming with C++ templates, ensuring type safety without limitations.
Concepts (C++20) and Generic Programming: Dive deeper into ensuring type-safety at compile-time through concepts.
Explore the C++ Library: Get familiarized with the C++ Standard Library, from containers and algorithms to a multitude of utilities.
Strings and Beyond: Master string operations, string_view(C++17) and harness the power of regular expressions.
Familiarize with I/O Streams: Navigate the world of I/O streams for efficient and formatted input-output operations.
Container Proficiency: Explore powerful container classes such as vector, list, and map.
Algorithmic Prowess: Understand the nuances of how algorithms work with containers and iterators.
C++ Utilities: Equip yourself with knowledge on smart pointers, time/date utilities, and more.
Concurrency & Parallelism: Get started with the concurrent world of C++, learning about threads, tasks, and synchronization mechanisms.
Unlock the power of C++ with this comprehensive course, curated for beginners and those seeking a refresher. By the end of this journey, you’ll be armed with the knowledge to write meaningful C++ programs and a passion for further exploration.
This course is designed to be a concise yet comprehensive tour. While it’s not exhaustive, it’s an ideal starting point for anyone interested in C++ programming. You’ll have the tools and confidence to embark on more advanced topics and projects by the end. Join us, and let’s begin this exciting journey together!
Why learn C++ or CPP?
CPP holds a distinct position in programming languages due to its unparalleled blend of performance, versatility, and object-oriented capabilities. Learning CPP equips developers with a deep understanding of computer architecture, memory management, and advanced software design patterns. Furthermore, its foundational role in developing many modern languages and systems means that CPP knowledge often translates to a more intuitive grasp of other technologies. Whether for high-performance applications, game development, embedded systems, or system software, CPP expertise can significantly broaden a developer’s horizons, enhance problem-solving skills, and open doors to various career opportunities in the tech industry.
Get Instant Notification of New Courses on our
Telegram channel.
The Renaissance of Modern C++: Quality, Safety, and Cost-Efficiency (C++11 to C++20)Â
Modern C++ has evolved beyond mere language extensions, emerging as a transformative force emphasizing safety, expressiveness, and versatility. Offering features like smart pointers, range-based loops, and type inference encourages developers to transition from traditional C-style hacks—often riddled with errors leading to runtime crashes and vulnerabilities—to contemporary, more predictable coding practices. This shift is not merely aesthetic; it’s an economic imperative. Inferior software can incur hefty remediation costs, jeopardize user trust, and even lead to revenue losses. Adopting modern C++ is not just about staying updated; it’s a strategic move towards producing resilient software that protects brand reputation and the bottom line.
Why doesn’t the course target interview-style learning with quick hacks and deprecated C-Style features that still work?
Adopting a mindset centered on long-term career growth is essential in today’s unpredictable job market, marked by unexpected layoffs and rapid shifts. Learners who approach their studies with genuine curiosity and commitment are equipping themselves with knowledge and deeply understanding of the underlying principles and concepts. They aim to fathom the “what,” “why,” and “how” of their subject, ensuring that their expertise remains relevant and adaptable across diverse real-world challenges. For instance, in the aftermath of a significant economic downturn, professionals with a deep-rooted understanding are more likely to navigate job transitions seamlessly. At the same time, those who’ve solely relied on memorization for short-term objectives, like clearing an interview, may find themselves ill-equipped to adapt. Such surface-level preparation might help achieve immediate goals but can compromise long-term career prospects and performance in dynamic work environments. This course encourages learners to embrace the former, holistic approach, preparing them for sustained success.
Introduction
Getting to know the instructor’s perspective before diving into the course
Warm-up
What is a C++ program?
Hello World: The simplest C++ program
Quick overview of the online development tool Compiler Explorer
Quick Check
Getting started with Udemy Coding exercises
Getting started with a Hello World program.
Basic Features of C++ present in all C++ programs
Functions : Declaration and basic syntax
Basic function coding exercise
Functions: Possible variations in syntax to support more features
Function variations
Types and variables in C++
Using types to create variables in a program
Arithmetic operations with Fundamental types in C++
Arithmetic operators
Initializations and auto keyword in C++
Initialization of variables
using auto keyword
Scope and lifetime of entities in C++ programs
Scopes and life times of objects in programs
Constants in C++ programs : const, constexpr, consteval
Arrays, Pointers and References in C++
Array pointers references
Null pointers in Modern C++
Using nullptr
Understanding pointers and references from a hardware perspective
Testing and selection based workflows with conditional statements and looping
if-else statements
Switch case statements
Using while loops
Section Quiz
User Defined Types in Modern C++
Introduction to User Defined Types
Builtin type checker. Applying the basics.
Structures in C++
Using Structures in C++
Introduction to Classes in Modern C++
Working with classes
Understanding the Enumerations in C++
Working with Enumerations in modern C++
Concept of Union and Variants in C++
Section Quiz
Modularity
Introduction and One Definition Rule
ODR in practice
Separate Compilation – Header Files Mechanism
Working with Header files
Modules ( introduced since C++20)
Namespaces
Working with namespaces in C++
Function Arguments
Argument passing scenarios
Return Values from functions
Returning values in functions of C++ programs
Section Quiz
Error Handling in C++
Introduction to error handling
Exceptions in C++
Working with exceptions
Invariants
Understanding the role of invariants in programs.
Alternatives to Error handling in C++
Using various error handling alternatives in programs
Assertions in C++
Intergrating assertion in C++ programs
Section Quiz
Classes
Introduction to Classes in C++
Concrete Types in C++
Concrete Type Example : Complex Number class
Implementing the complex number.
Concrete Type Example: Container class
Abstract Types in C++
Using abstract types in C++ programs
Virtual Functions in C++
Class Hierarchies in C++
Working with class hierarchies in C++
Class Hierarchies in Practice
Section Quiz
Essential operations with classes necessary to build programs
Introduction to essential opearations and Member initialization
Implementing essential operations
Copy and move operation semantics
Using move sematics for efficient copying.
Resource Management in C++
Operator overloading
Implementing operator overloading in user defined classes
Conventional Operations – 1
Conventional Operations – 2
Implementing a simple hashing function
User Defined Literals
Implementing User defined literals
Section Quiz
Templates
Introduction to templates and parameterized types.
Working with parameterized types
Concepts in C++
Template argument deduction and special cases where compiler needs your help!
Template argument deduction in practice
Function Templates and Functors
Using function template and function objects in programs
Lambda Expressions
Using lambda expressions in your C++ programs.
Template mechanisms
Working with aliases
Section Quiz
Concepts ( C++20) and Generic Programming
Introduction to Concepts as extension to use cases of templates.
Need for concepts in the C++ type system
Using concepts in programs
Concepts based overloading
Checking Valid code using concepts in programs
Defining a concept
Concepts and auto keyword
Generic programming as a use case of concepts and templates
Variadic templates
Using parameter packs and variadic templates
Fold Expressions ( C++17) , Argument forwarding, Template compilation model
Section Quiz
C++ Standard Library Overview
Introduction to C++ standard library
Standard library components overview
Standard Library Organization
Multiple header issues and solving them
Section Quiz
Strings and Regular Expressions
Introduction
C++ String class interface and operations
C++ String class interface and operations
String implementation overiew
string_view feature of C++
Regex classes in C++
Regex notation and usage overview
Section Quiz
Input and Output
Introduction to IO facilities in C++
Ostream: Output streams
Istream: Input Stream
IO state : Handling the various states of streams like production code.
IO with User Defined Types
Writing input output opreatios for User defined Types.
Stream formatting for presenting data with appropriate format
Format functions to present data in the printf style formatting
Streams in C++
Working with string streams
Filesystem facilites in the standard library of C++
Section Quiz
Container (STL)
Introduction to STL containers
Vector
List and forward list
Working with vector, list and forward_list
Map
Working with std::map and std::set
Unordered Map (Hash map )
Using the hash map and hash set in C++
Allocators in C++
Container overview from production perspective.
Section Quiz
Algorithms (STL)
Introduction to STL algorithms in C++
Use of iterators by STL algorithms to achieve generic functionalities
Working with iterators and STL algorithms
Types of iterators
Predicates
Using predicates with STL algorithms
Overview of commonly use STL algorithms in production code.
Parallel Algorithms introduced in standard library
Section quiz
Ranges
Introduction to ranges in C++
Views
Generators as supporting tools for ranges
Pipelines
Concepts overview
Section Quiz
Pointers and Container (non STL)
Introduction to Pointers and containers
Pointers
Unique Pointer and shared Pointer (unique_ptr and shared_ptr )
Using unique_ptr and shared_ptr in C++ programs to make them safer.
Span
Containers (Non STL)
Working with pair and tuple in C++ programs
Alternatives (variant, optional , any)
Section Quiz
Utilities provided by C++ standard library
Introduction
Time , Chrono utilities
Applying chrono utilities in your programs
Function adaption
Applying function adaption
Type functions
Using Type functions in your programs
Source location feature
move and forward semantics
Working with move and forward semantics to leverage the power of Modern C++
Bit manipulation utilities overview
Ways of exiting programs predictably
Section Quiz
Numerics in C++ standard library
Introduction
Quick overview of numerical algorithms and mathematical functions in C++ library
Utilizing the numerical algorithms available in C++ standard library
Random number facilities provided by standard library
Using random number facilites provided in modern C++
Vector Arithmetic and other facilities provided by standard library
Using valarray in C++ programs for vector arithmetic
Section Quiz
Introduction to Concurrency using Modern C++ ( upto C++20)
Introduction
The notion of task and threads
A simple concurrent program using Modern C++ concurrency constructs
Passing arguments and returning values from threads
Passing data and getting back results from concurrent programs in C++
Sharing data between threads
Using mutex and lock to share data between threads without corruption.
Waiting for events using condition variable
Using condition variables in programs
Alternatives to sharing data and low level semantics using Futures.
Using futures in C++ programs
A brief introduction to Coroutines
Section Quiz
Resources
[Bonus Lecture]