Fundamentals of C++11 and C++14

(code CPPF-11)

DESCRIPTION

The goal of this three-day hands-on programming course is to introduce the most important syntax and new features in C++11/C++14. We also discuss the migration from C++98 to C++11/C++14 including deprecated C++98 features, improved features as well as new functionality. We show how to use the new syntax, first by taking motivational and easy to understand examples and then progressing to more extended cases that use advanced C++ functionality and libraries. We concentrate on the functionality that promotes developer productivity, code robustness and maintainability. The percentage theory/practice is approximately 50/50 percent.

After having completed this course you will have learned the most important syntax and functionality in C++11/C++14 and be able to use it in applications. The course Advanced C++11 and C++14 (code CPPA-11) builds on and extends this course.

 

Subjects Covered

  • What’s new in C++11; deprecated features in C++98.
  • New and improved fundamental syntax and language features.
  • Introduction to functional programming and lambda functions in C++.
  • New data types, containers and algorithms (STL).
  • Improved and extended templates.
  • Libraries (Regex, random numbers, std::bind)
  • Introduction to C++ Concurrency (threads and tasks).

 

Benefits

  • Learn C++11 essentials in an easy to follow, step-by-step manner.
  • Apply new skills to your applications.
  • Access to full source code in the book.
  • Exercises and mini-projects to consolidate the skills learned.
  • Learn modern multiparadigm programming styles in C++.

 

For whom is this Course?

C++ programmers who develop applications in C++98. No previous knowledge of C++11 is necessary. Please note that we will not be reviewing C++98 syntax.

If you are interested in taking this course (in original or customised form) please contact us at info@datasim.nl

 

What do you receive?

Course slides and full source code related to the course.

 

Follow-up Courses

  • Advanced C++11 and C++14 (code CPPA-11)
  • Advanced System Design and Software Design Patterns (DESA)

 

Course Contents

Part I Background

Design Goals

  • Stability and compatibility with C++98
  • Increase type safety
  • Increase performance
  • Make C++ easy to learn

Global Overview

  • Core language usability enhancements
  • Core language functionality enhancements
  • C++ Standard Library changes
  • Multithreaded memory model
  • Removed and deprecated features

 

II Fundamentals and Essential Language Features

New Language Features

  • 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 operator
  • Rule-of-Three and Rule-of-Five

 

Memory Management and Smart Pointers

  • Design rationale
  • Class shared_ptr
  • Destruction policies
  • Class weak_ptr
  • Class unique_ptr

 

Using Smart Pointers

  • Smart pointers versus raw pointers
  • Classes with embedded pointers
  • Reengineering legacy code and software design patterns
  • Move semantics with shared pointers

 

Bits and Pieces: Usability Enhancements

  • Type alias (alias template)
  • Automatic type deduction and auto specifier
  • Range-based for loops
  • nullptr
  • New fundamental data types

 

III Data Types and Data Containers

Basic Types

  • Unrestricted unions
  • std::bitset
  • std::ratio
  • Timepoint and clock

 

Basic Containers

  • std::forward_listForward list
  • Fixed-sized array std::array<>
  • std::pair<> and std::tuple<>
  • Exception classes

 

Applications of Basic Containers

  • Tuples as function return types and input arguments
  • Fixed-sized matrices based on std::array<>
  • Using tuples to hold configuration data; tuple nesting

 

IV C++ Classes and Class Modelling

New Class-related Functionality

  • explicit specifier
  • Deleted and defaulted member functions (delete, default)
  • Generalised constant expressions (constexpr)
  • override and final
  • noexcept
  • Uniform initialization

 

Class Templates

  • Template declaration
  • Implementing the member functions
  • Using the template class
  • Default template arguments
  • std::decltype and std::declval
  • Examples

 

Function Templates

  • What is a function template?
  • Defining the template
  • Using the template
  • Argument deduction
  • Overloading function templates
  • Advanced Template Programming
  • Partial specialization
  • Nested template classes (for example, 1:N aggregations)
  • Traits and policy classes
  • Template template parameters

 

V The C++ Function Panorama

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

 

Lambda Functions

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

 

A Taxonomy of Functions in C++

  • Callable objects
  • Function pointers and free functions
  • Object and static member functions
  • Function objects
  • Lambda functions

 

Applications

  • Using std::function as universal function type
  • std::function and its target methods
  • Using lambda functions to configure applications
  • std::function as an alternative to virtual functions
  • Regex
  • Random number generator

 

Your Trainer

Daniel J. Duffy started the company Datasim in 1987 to promote C++ as a new object-oriented language for developing applications in the roles of developer, architect and requirements analyst to help clients design and analyse software systems for Computer Aided Design (CAD), process control and hardware-software systems, logistics, holography (optical technology) and computational finance. He used a combination of top-down functional decomposition and bottom-up object-oriented programming techniques to create stable and extendible applications (for a discussion, see Duffy 2004 where we have grouped applications into domain categories). Previous to Datasim he worked on engineering applications in oil and gas and semiconductor industries using a range of numerical methods (for example, the finite element method (FEM)) on mainframe and mini-computers.

 

Daniel Duffy has BA (Mod), MSc and PhD degrees in pure and applied mathematics and has been active in promoting partial differential equation (PDE) and finite difference methods (FDM) for applications in computational finance. He was responsible for the introduction of the Fractional Step (Soviet Splitting) method and the Alternating Direction Explicit (ADE) method in computational finance.

 

He is also the originator of two very popular C++ online courses (both C++98 and C++11/14) on www.quantnet.com in cooperation with Quantnet LLC and Baruch College (CUNY), NYC. He also trains developers and designers around the world. He can be contacted dduffy@datasim.nl for queries, information and course venues, in-company course and course dates.

Course dates

Date from Date to Location Price (excl. VAT)
Tuesday 5 June 2018 Friday 8 June 2018 Amsterdam EUR 1840.00

Fundamentals of C++11 and C++14

Course date

Fill in your personal details