Go to the Datasim Education BV homepage Datasim Education BV Datasim Education BV Datasim Education BV Datasim Education BV Datasim Education BV
Information request

Follow datasim on Twitter

Share this page

C++ Training

Course Category: 

Advanced C++ and C++ 11/C++ 14 The new Standard  - (code CPP-A)

The goal of this 3-day hands-on course is to discuss new developments in C++ 11 and how C++ 11 is a major improvement on C++ 98. We also discuss the applications of C++ 11 to multi-paradigm software design. We realise this goal by elaborating the new features in detail and providing examples of use.

C++ 11 is a major advancement in the evolution of C+ + and this course covers the features in the latest revision.

The percentage theory/practice is approximately 70% / 30%.

Subjects Covered

  • C++ 11 as a better C++. Improved syntax.
  • Move semantics.
  • Smart memory management.
  • Modelling functions, new style. Functional programming and lambda functions.
  • Hashing and unordered containers.
  • Concurrency and multi-threading.
  • Other C++ 11 libraries.
  • C++ 14 overview.

What do you learn?

We discuss the most important C++ features to help the developer create robust and flexible software, for example by means of:

  • Applying the extensive language features in C++ 11 to your applications.
  • Creating flexible multi-paradigm applications.
  • Reduce reinvention of the wheel by using C++ libraries.
  • Fast data structures (unordered containers).
  • Tips and guidelines for migrating to next generation design patterns and component-based design.

Your Trainer

Daniel J. Duffy has been involved with C++ in the role of programmer, designer and trainer since 1989. He has been involved in a wide range of applications such as computer graphics, holography, process control, numerical analysis and computational finance. Activities also entail setting up C++ and Boost C++ courses from novice to expert level. He is author of ten books on software design, C++ and applications.

Daniel J. Duffy has a PhD in Mathematics from Dublin University (Trinity College).

Course updated September 2015

Course contents

Part I C++ 11 as a 'better' C++

New Language Features, I Keywords

  • auto
  • decltype
  • noexcept
  • constexpr
  • nullptr

New Language Features, II

  • Uniform initialization and initializer lists
  • Default template parameters
  • Function declaration syntax
  • New fundamental data types

Move Semantics

  • What is move?
  • Copying versus moving: performance
  • Rvalue references
  • Move constructor and move assignment

Using Move

  • Arrays and containers
  • File streams
  • User-defined copyable and movable classes
  • Composition and inheritance
  • Perfect forwarding

Exception Handling

  • Exception class hierarchy
  • Logic and run-time errors
  • Exceptions thrown by the Standard Library
  • Error codes compared to error conditions

Smart Pointers and Memory Management

  • Design rationale
  • Class shared_ptr
  • Destruction policies
  • Class weak_ptr
  • Class unique_ptr
  • Performance and reliability


  • Variadic templates
  • Variadic tuples
  • Applications of variadics

Part II Modelling Functions and STL

Background, Traditional

  • Approach Function pointers
  • Function overloading and virtual functions
  • The categories of polymorphic behaviour
  • Using (and misusing) inheritance to realise subtype polymorphism

Fundamentals of Functional Programming (FP)

  • Short history of FP
  • Higher-order functions
  • Recursion; passing a function to itself
  • Strict and non-strict (delayed) evaluation
  • Pure functions and lambda functions

Functional Programming

  • Functions and Data
  • Function composition
  • Closures
  • Currying and uncurrying
  • Fold and continuations

Functional Programming in C++

  • Overview C++ as a multi-paradigm programming language
  • Universal function type (polymorphic) wrappers (std::function)
  • Binders and predefined function objects (std::bind)
  • Lambda functions versus binders
  • A uniform function framework

Lambda Functions

  • What is a lambda functions
  • The closure of a lambda function: closure
  • Using lambda functions with auto
  • The mutable keyword

Using Lambda Functions

  • Configuring applications
  • With algorithms
  • As sorting criteria
  • As hash function
  • Lambda functions versus function objects

A Taxonomy of Functions in C++

  • Function pointers and free functions
  • Object and static member functions
  • Function objects
  • Lambda functions
  • Events and signals (Boost signals2 library)

Part III Data Structures and STL

Review of STL Containers

  • Sequence containers
  • Associative containers
  • Unordered containers
  • Container adapters
  • User-defined containers


  • Hash function and hash table
  • Categories of hash function
  • Creating custom hash
  • Applications

Boost and STL Heap

  • Heap ADT
  • Variants (Fibonacci, skew, priority queue, etc.)
  • Heap and computational efficiency
  • Boost Heap versus STL heap

Unordered Containers

  • Differences with (ordered) associative containers
  • Abilities of unordered containers
  • Complexity analysis
  • Integration with STL and other Boost libraries
  • The Bucket interface


  • Modelling n-tuples (pair is a 2-tuple)
  • Using tuples as function arguments and return types
  • Accessing the elements of a tuple
  • Advantages and applications of tuples

Fixed-sized Arrays std:array<>

  • Why do we need std:array<> ?
  • Operations and abilities
  • Using arrays as C-Style arrays
  • Combining arrays and tuples

Part IV Other Libraries

Clocks and Timers

  • Overview of Chrono library
  • Duration and timepoint
  • Clocks
  • Date and time functions

Regular Expressions (Regex)

  • Regex Match and Search Interface
  • Subexpressions
  • Regex iterators and token iterators
  • Replacing regular expressions
  • Flags and expressions

Random Numbers and Statistical Distributions

  • What are random and pseudo-random numbers?
  • Engines and distributions in C++
  • Basic engines, engine adapters; adapters with predefined parameters
  • Categories of distributions
  • Examples and applications

Concurrency Fundamentals

  • Threads in C++; properties
  • Promises and return arguments
  • Threads in detail
  • Mutexes and locks

Advanced Concurrency

  • Synchronisation and condition variables
  • Futures and async()
  • Launch policies
  • Waiting and polling
  • Example: Producer-Consumer pattern
  • Atomics

Part V C++ 11 Application Design

Advanced Templates

  • Partial specialization
  • Dynamic versus static polymorphism
  • Generic programming
  • Variadic templates
  • Alias templates (template typedef)
  • Generic lambda functions

Using C++ 11 in Applications: Epilogue

  • Design patterns revisited and reengineered
  • Multi-paradigm design in C++
  • Software layering
  • Software components
  • Software assembly process
  • Multiparadigm software development

C++ 14

  • Minor bug fixes and enhancements
  • Generic lambdas and lambda captures expressions
  • Function return type deduction for all kinds of function
  • Aggregate member initialization
  • New standard library features< /LI>< /UL>

This intensive and advanced course assumes real-life experience of C++ in a production environment. This is not a beginner's course. Basic C++ 11 assured.

Who should attend?

Experienced software developers and programmers who wish to learn the new powerful features in C++ and apply them to their work.

This course is also useful for technical designers and architects.

Course form

Duration, price, date, locations
Course duration 3 days
Dates and locations (click on date to print registration form)

Date Location Price Language
17, 18, 19 october 2016 Hotel Mercure, Nieuwegein Euro 1495.-- Dutch
7, 8, 9 february 2017 Hotel Mercure, Nieuwegein Euro 1495.-- Dutch

It is also possible to organize this course at your company premises (the in-company option). If you have any question, please contact our Datasim office.

Follow-up courses

Share this page

Contact and Profile
Registration form
Course Dates