From Beginner to Expert in C++

C++ Modernization and Best Practices From Beginner to Expert in C++

Duration: 7 days
Software: Ubuntu 23.10, Cmake 3.29, Clang 17.0.1, Ninja 1.11.1
Skill level: Beginner
Certificate: Provided
Beyond Training Service: After your training period is over with HexoSys, we won’t leave you alone. You can reach out to us at info@HexoSys.com for any kind of support. We are here to offer consultation, project implementation, and technical support tailored to your specific needs.

Enroll Now Download Brochure

Course Overview

This course is crafted to guide students through the entire spectrum of C++, covering everything from cultivating the programming mindset to debugging techniques for multi-threaded code, from SOLID principles to Template Meta-Programming. Upon completion of this course, you'’ll have the skills to debug and enhance any code effectively. This solid foundation will also help you master any other programming language.

Training Objectives

After completing this course, you will:

  • Will have every tool needed to solve your programming problems.
  • Will be able to optimize multi-threaded algorithms.
  • Will gain a solid understanding of SOLID principles.
  • Will be able to test, debug, and benchmark your code.

Target Audience

Anyone interested in C++ and willing to tackle the most complex ideas and constructs present in reusable and performant designs.

Teaching Methodology

  • Instructional strategies include lectures, discussions, demonstrations, and workshop-based learning which are used to convey information, facilitate learning, and promote understanding.
  • Learning activities include exercises, projects, and homework designed to engage participants in the learning process actively.

Course Outlines

Introduction

  • How Computers Work
  • Compiled vs. Interpreted Languages
  • C++ History and 98, … 26 std

Basic Concepts

  • Writing your first C++ Program, Getting to Know the Console
  • Variables and Statements
  • Control Flow Constructs
  • Functions and Function Overloading
    • Recursion

CMake: Introduction

  • Intro to Targets
  • How to Structure Your Project

Classes: First Round

  • How to Use std::string
  • Abstraction and Reuse in C++
  • Constructors and Destructors
  • Member Functions
    • Method Overloading
  • Structs

What are Tests in Software Development

Workshop

  • 125. Valid Palindrome
  • 242. Valid Anagram
  • 191. Number of 1 Bits
  • 190. Reverse Bits
  • 7. Reverse Integer

Template: First Round

  • How to Use the Initializer List
  • How to Use std::array
    • Member Types
  • How to Use std::vector

Pointers and References

  • std::array vs C-Style Array
  • C-style Strings
  • Common Mistakes
  • Unique and Shared Ownership

Classes: Second Round

  • Inheritance and Polymorphism
  • Operator Overloading
  • Static in Functions and Classes
  • Casts

Asserts

Namespaces

Write Testable Code

  • Utilize CMake for Testing
  • Setting up GTest

Workshop

  • 1. Two Sum
  • 36. Valid Sudoku
  • 11. Container With Most Water
  • 206. Reverse Linked List
  • 21. Merge Two Sorted Lists

Exceptions

  • Why Exception Safety is Important

Classes: Last Round

  • Move Semantics and Swap
  • Friend Classes and Functions
  • Multiple Inheritance
  • Overloading new and delete Operators
  • Double-Dispatch

Templates: Second Round

  • Non-Type Template Parameters
  • Selective Instantiation
  • How Compiler Finds Right Function:
    • Argument Dependent Name Lookup
    • Overload Set
  • Template Argument Deduction
  • Type Inference
  • Function Templates
  • Type Traits
  • Constant Expressions and C++20 consteval

Workshop

  • Building a Linked List
  • Loop Over List

STD Library: First Round

  • Function Pointers
  • Lambda Expressions
  • Containers
  • Iterators
  • Algorithms
  • C++20 Ranges and Span

Templates: Last Round

  • C++20 Concepts
  • Inheritance and Templates
  • CRTP
    • Mixin Classes
  • Type Erasure
    • std::any and std::variant
    • Visitor Pattern

Templates: Second Round

  • Non-Type Template Parameters
  • Selective Instantiation
  • How Compiler Finds Right Function:
    • Argument Dependent Name Lookup
    • Overload Set
  • Template Argument Deduction
  • Type Inference
  • Function Templates
  • Type Traits
  • Constant Expressions and C++20 consteval

Workshop

  • Building a Linked List
  • Loop Over List

C++20 Modules

  • Global Module Fragment
  • Private Module Fragment

Workshop

  • Add Iterator Support to the Linked List

STD Library: Last Round

  • Localization
  • Streams
    • Files Read and Write
    • String Streams
    • Error Handling
  • Regular Expressions
  • Date and Time Manipulation
  • Filesystems
  • Random Numbers
  • source_location

Styling Your Code

  • Use CMake and Clang format to Style Your Code
  • Static cCheck with Clang-tidy or /CPPCHEcKCppcheck

Workshop

  • Making Tic Tac Toe Game
    • Featuring FTXUI

Benchmarking

  • CMake and Google Benchmarking Library

Multi-threading: First Round

  • The Need for Speed
  • Single Threaded vs. Multi-Threaded
  • First Attempt at Making a Multi-Threaded Algorithm
    • Threads
    • Shared Resources
    • Deadlocks
    • Race Conditions
  • Atomics, Mutexes, Locks and Guards
  • Second Attempt
    • Cache Line
    • False Sharing
  • Storage Duration in C++
  • Third Attempt

Multi-threading: Last Round

  • Async and Future Promises
  • Coroutines
  • Memory Orders
  • Designing a Concurrent Queue

Workshop

  • Implementing Multi-Threaded Quicksort

Debugging Techniques

  • Sanitizers
    • Memory Leaks and Undefined Behavior
  • Debugging Concurrent Code
    • vtune

Profiling

Q.A.

team

About the trainer

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.