C++ Training Courses

I offer corporate training in the modern C++ programming language. Email me today to get started!

Why train my team?

  • Orienting new hires. Communal team training gets everyone on the same page. You won’t discover six months in that two of your new hires don’t know what smart pointers are, or how string differs from string_view, or how comparison operators work in C++20.

  • Upgrading your codebase. The C++ standard expands every three years. While compiler support does trail the paper standard, it’s generally expected that your codebase will move from C++17 to C++20 to C++23. A trainer’s expertise helps you make feature decisions — where and how do we use auto? Ranges? Modules? — and avoid pitfalls.

  • Crash courses. Your team knows C++17 inside and out. But you’ve decided your next codebase will go all in on C++20 Concepts and Ranges. Focused, trustworthy training with an expert can do in days what would take weeks given only StackOverflow and ChatGPT.

Format

My typical training is arranged as a 16-hour or 20-hour (four- or five-half-day) course which alternates PowerPoint lectures with hands-on C++ coding exercises. Each lab exercise requires writing and compiling actual C++ code, and reinforces the material learned in the preceding lecture.

This can be done on-site, or online (e.g. via Zoom or Teams); in fact online is easier. If you’re looking for on-site training, be aware that I’m geographically located in the New York City area.

Permission to record the training, and keep the recording for up to (3–6–12) months, can be granted.

Quotes from satisfied clients

Arthur has been our first instructor that is intimately familiar with both the core language and standard library. His passion for C++ makes it easy for me to stay focused on the material being presented.

His presentation of the slides was at the right level of abstraction for me. The labs were well thought out and at the right level of complexity.

Arthur was well prepared and knowledgeable, but approachable. He presents, communicates, and interacts well. It was really a great experience.

Pricing

Contact me for a quote.

Sample course outlines

Fundamentals of C++ — This “package course” is suitable for anyone experienced in an imperative programming language such as Python or JavaScript, as well as anyone who wants a coherent overview of C++ from the ground up. The eight labs build on each other, starting with a simple string reversal using char* and culminating in a classically polymorphic class hierarchy managed with smart pointers.

  • Parameter-passing, pointers and references, const
  • Separate compilation, namespaces, inline
  • Arrays, sizeof, function overloading
  • Function templates, iterators, vector
  • Lambdas, erase-remove idiom
  • new/delete, special members, RAII, exceptions
  • unique_ptr and make_unique
  • Move semantics
  • More STL containers: multiset, comparators, pair
  • Inheritance, polymorphism, virtual dispatch, dynamic_cast

Intermediate C++ — Collaborate to tailor a custom intermediate-level course from topic-based units, each approximately two hours in length. Units appropriate for an intermediate course include:

  • New-in-C++11 must-haves such as auto, nullptr, and static_assert
  • decltype and <type_traits>
  • Templates, explicit specialization, and partial specialization
  • Deep dive on lambdas
  • enum and union
  • Deep dive on smart pointers (unique_ptr and shared_ptr)
  • Deep dive on the STL iterator model
  • Deep dive on the STL container zoo and iterator invalidation
  • Unordered associative containers and hash
  • Move semantics and rvalue references
  • Forwarding references, perfect forwarding, and variadic templates
  • string_view
  • Name lookup, ADL, and the hidden friend idiom
  • C++20 requires-clauses and concepts

Advanced C++ — Units appropriate for an advanced-level course include:

  • Deep dive on optional, variant, tuple, and expected
  • Type erasure: function and any
  • Using “triviality” for optimization
  • Interfacing with C
  • Deep dive on macros and the C preprocessor
  • Metaprogramming with if constexpr, tag dispatch, and SFINAE
  • Compile-time programming with constexpr and consteval
  • C++20 comparisons and operator<=>
  • C++20 std::format
  • Introduction to C++20 Ranges
  • The std::views zoo
  • C++23 explicit object parameter syntax and “deducing this

Don’t see what you need? — Just let me know; I may be able to do it!

Contact Me

Email me at arthur.j.odwyer@gmail.com to get started. I recommend your subject line include the phrase “C++ training.”