Modern Expressive C++

5 Day Course

Book Now - 3 Delivery Methods Available:

Classroom Virtual Classroom Private Group - Virtual Self-Paced Online


C++ is undoubtedly one of the most popular programming languages for software development. It brings language enhancements and object-oriented programming support to the extremely popular language C . However, C ++ is a large and sometimes difficult language, and even with a C or object oriented background, a programmer needs to understand C ++ programming style as well as C ++ constructs to get the best out of it.

The course is written from a developers rather than an academics perspective, providing a thorough practical coverage of the language. It aims to eliminate common misconceptions and poor programming practice by teaching the features of the language and standard library that enforce good practice.

In particular the course teaches the Modern C++ approach, to deliver clear expressive and efficient code. Although C++11 and more recent additions to the language are taught throughout, most of the material is useful and relevant to pre C++11 users.

This is a hands-on course with a mix of tuition and practical sessions for each technical chapter which reinforce the Modern Expressive C ++ programming techniques covered in the course. Delegates will write unit tests to verify their work as they develop a GUI based tool to support their learning.


  • Define and use data types.
  • Declare, define and call functions.
  • Use pointers, smart pointers, dynamic memory and object lifetime.
  • Understand the importance and application of const consistency.
  • Understand the key concepts and vocabulary of object orientation.
  • Implement classes.
  • Provide inward and outward conversions to UDT's.
  • Build new classes from other classes using composition and aggregation.
  • Build new classes from other classes using inheritance.
  • Design and write code with polymorphic behaviour.
  • Use container classes and templates.
  • Make extensive use of algorithms.
  • Write code that is efficient and robust

Training Partners

We work with the following best of breed training partners using our bulk buying power to bring you a wider range of dates, locations and prices.


Collapse all

Language Overview (14 topics)

  • Why use C++?
  • Language Distinctives
  • Classic v Modern C++
  • File Structure
  • Online Compilers
  • Hello World
  • Identifiers
  • Keywords
  • Declarations
  • Definitions
  • Expressions and Statements
  • Member Access
  • Operators
  • Layout

Variables and Functions (21 topics)

  • Mutable and Immutable Variable types
  • Auto Variables
  • Brace or List Initialization, Uniform Initialization
  • Scope Types
  • Lifetime
  • Namespaces
  • Name Hiding
  • Scope Resolution
  • Function Prototype
  • Parameter Types
  • Reference
  • Function Return Types
  • Trailing Return
  • Header Files
  • Function Parameter Defaults
  • Function implementation
  • Inline function
  • Source-code Implementation
  • Deduced Return Type
  • Anonymous Return
  • Un-named arguments

Collections (9 topics)

  • Arrays
  • Array Initialisation
  • Array Behaviour
  • Arrays as Arguments
  • std::array
  • Vector Basics
  • Enumeration - Range For-loop
  • File System Basics
  • File-Streaming

Types and Const Qualifiers (8 topics)

  • Primitive Types
  • Uninitialised Values
  • Type Aliases
  • This-pointer
  • Const Objects
  • Const Function Parameters
  • Queries and Modifiers
  • Free Functions

Foundational Design Principles (7 topics)

  • Encapsulation
  • Private Access
  • Things that Break Encapsulation
  • Single Responsibility Principle
  • Expressiveness
  • Expressive Names
  • Resource Acquisition Is Initialization - RAII

Literals and Strings (6 topics)

  • Literals and Magic-Numbers
  • Numeric Limits
  • Strings
  • Tokenization
  • stringstream
  • Formatting Streams

Flow Control (9 topics)

  • Boolean
  • Conditions & Boolean Operators
  • If - Else
  • Range-For
  • Counted For-Loop
  • While-loop
  • Enum
  • Switch
  • Cost of testing and branching

Header Files (4 topics)

  • One Definition Rule
  • #define
  • constexpr literals
  • Precompiled Header Files

Unit Testing (4 topics)

  • What should be tested?
  • Project Arrangement
  • Unit Tests
  • Compiling Source Code to Use Libraries

Iterators (7 topics)

  • Operators
  • Prefix / Postfix Increment / Decrement
  • Iterators
  • Member Access Operators
  • Moving Iterators
  • Query Iterators
  • Iterator Position

Pointers (8 topics)

  • Naked Reference
  • Problems with Null-Pointers
  • Query Pointers
  • Array Pointers
  • Aggregate Pointers
  • Function Pointers
  • void, void pointers
  • Pointers as Iterators

Zero-Cost Abstractions (3 topics)

  • Encapsulating Concepts
  • Enumerated Type, enum
  • Bitwise (Flag) Enums

Lambdas (11 topics)

  • How Expressiveness Breaks Encapsulation
  • Locally defined function
  • Lambda Syntax
  • Capture List
  • Argument List
  • Return Type
  • Lambda Body
  • Lambda Closure as Function Pointer
  • Inlined Lambda
  • Immediately Invoked Lambda
  • Lambdas in Header Files

Algorithms (6 topics)

  • Non-Range Algorithms
  • Range Algorithms
  • Algorithm Examples
  • back_inserter
  • Loops and Folds
  • Accumulating Strings

Inline and Extern (4 topics)

  • Symbol Tables
  • Header Files Defining Objects or Functions
  • Inlining
  • Extern

Container Types (3 topics)

  • Compile-time sized containers
  • Dynamically sized Sequential Containers
  • Dynamically Sized Associative Containers

Type Conversions (7 topics)

  • Implicit Type Conversions
  • Keyword Casts
  • Conversion Constructor - Inward Conversion
  • Class Operators
  • Conversion Assignment
  • Conversion Operator - Outward Conversion
  • Allowable Conversions

Function Overloading (6 topics)

  • Function Overloading
  • Overloading on Const
  • Function Delegation
  • Inlined Function Definitions
  • Template Functions
  • Template Classes

Classes (17 topics)

  • Programming Paradigms
  • Object Oriented Programming (OOP)
  • Class Definition
  • Public Interface
  • Class Header File
  • Construction
  • In-Class Defaults
  • Default Constructor
  • Destruction
  • Synthesised Functions
  • Member Function Implementation
  • Member Initializer List (MIL)
  • std::initializer_list Constructor
  • Static Storage
  • Class Static Data
  • Class Static Functions
  • Struct

Inheritance (12 topics)

  • Inheritance Hierarchy
  • Liskov substitution
  • Public Inheritance
  • Function Specialisation
  • Protected Access
  • Private Inheritance
  • Accessing Base Class Members
  • Multiple Inheritance
  • Base Class Construction
  • Constructor Delegation
  • Generalisation
  • Abstract Classes

Polymorphism (6 topics)

  • Virtual Functions
  • Override
  • Virtual Destructor
  • Pure Functions
  • Pure Abstract Class (Interface Class)
  • Null-Objects

Association (14 topics)

  • Association
  • Composition
  • Inheritance
  • Aggregation
  • Object Creation for Aggregation
  • new and delete
  • Array New & Delete
  • New and Delete Problems
  • Expressive Lifetime Management
  • unique_ptr
  • shared_ptr
  • Safe Aggregation
  • Multiple Association
  • Friendship


  • Delegates must have solid experience of programming, with a clear understanding of functions and multiple source file projects. A basic understanding of Object Oriented principles is assumed. Those coming from C, C# or Java will have an advantage.
  • Delegates with no recent programming experience should attend the Programming Foundations course first.
  • Experienced C++ programmers should also consider the course Modern Robust C++ Development.

Please note: Delegates will require a Microsoft account (signing up one is free). The instructions on how to set up a Microsoft account can be found here.

Scheduled Dates

Please select from the dates below to make an enquiry or booking.


Different pricing structures are available including special offers. These include early bird, late availability, multi-place, corporate volume and self-funding rates. Please arrange a discussion with a training advisor to discover your most cost effective option.

Code Location Duration Price Feb Mar Apr May Jun Jul
Later scheduled dates may be available for this course.

Course PDF


Share this Course


Recommend this Course