-   Forums
     -   Articles and Whitepapers
     -   Downloads
     -   Courses and Events
     -   Course Registration
     -   Distance learning
     -   Courses for Universities
     -   Books
     -   Audios and Demos
     -   Testimonials

Share this page:  Tweet

Advanced C++ and C++ 11: The new Standard - (code CPPA)

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

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 from Dublin University (Trinity College).

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

Part II: Modelling Functions and STL

  • 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 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

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
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


This intensive and advanced course assumes real-life experience of C++ in a production environment. This is certainly not a beginner’s course.

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.

Duration, price, date, locations and registration

Course duration: 3 days.
Dates and location: (click on dates to print registration form)

Date(s) Location Price Language
Dec 06 - Dec 08 2016 London
(United Kingdom)
€ 1755.-- ex. VAT
€ 2123.55 inc. 21% VAT
Mar 13 - Mar 15 2017 London
(United Kingdom)
€ 1755.-- ex. VAT
€ 2123.55 inc. 21% VAT

Click on one of the dates above to register.
This course can also be organised at your company's premises. Call Datasim (+31-72-2204802) or for more information about the possibilities.

Share this page:  Tweet