-
-
-
-
-
-
-
-
-
-
|
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
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
Hashing
- 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
Tuples
- 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
PrerequisitesThis 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 |
English |
Mar 13 - Mar 15 2017
|
London
(United Kingdom) |
€ 1755.-- ex. VAT
€ 2123.55 inc. 21% VAT |
English |
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.
|
|