Advanced C++

Duration (in days): 

5

Description:

Advanced C++ Training course offers a comprehensive coverage of the advanced features of the C++ language.

The course starts with basic OO concepts, and then a quick introduction to the language. The language is presented, not as an extension of C, but as a demonstration of how object-oriented development promotes a new, productive way of thinking.


Other topics covered include Templates, Standard Template Library (STL) and Exceptions. The course also covers some advanced Object-Oriented design techniques in C++ such as Design Heuristics, Design by Contract, Interfaced-based programming, Composition and Delegation Patterns, Memory Management and Smart Pointers, Subtyping, Design for efficiency and Meta programming in C++.


The course includes a complete overview of the new features in C++11 and C++14


Our goal is to transfer as much knowledge as possible from the classroom to the workplace. Advanced C++ Training course has been carefully designed to ease a C++ programmer into new and advanced language features and advanced Object-Oriented design concepts in C++ with the use of lots of hands-on exercises

Objectives:

  • Learn how to apply advanced concepts of OO designs

  • Be able to write and maintain C++ programs

  • Write robust, maintainable, elegant and efficient C++ code

  • Be able to deploy good C++ programming practices

  • Be able to use the advanced features of the C++ programming language

  • Be able to implement advanced Object-Oriented techniques in C++ to realize efficient and flexible applications

  • Leave with skills needed to develop industrial C++ applications

Prerequisites:

Advanced C++ Training course offers a comprehensive coverage of the advanced features of the C++ language.

The course starts with basic OO concepts, and then a quick introduction to the language. The language is presented, not as an extension of C, but as a demonstration of how object-oriented development promotes a new, productive way of thinking.


Other topics covered include Templates, Standard Template Library (STL) and Exceptions. The course also covers some advanced Object-Oriented design techniques in C++ such as Design Heuristics, Design by Contract, Interfaced-based programming, Composition and Delegation Patterns, Memory Management and Smart Pointers, Subtyping, Design for efficiency and Meta programming in C++.


The course includes a complete overview of the new features in C++11 and C++14


Our goal is to transfer as much knowledge as possible from the classroom to the workplace. Advanced C++ Training course has been carefully designed to ease a C++ programmer into new and advanced language features and advanced Object-Oriented design concepts in C++ with the use of lots of hands-on exercises

Audience

Anyone that have the ambition of becoming a great C++ programmer.

Outline

Language History and C++11/14

  • History of C++

  • Versions

  • New in TR1

  • New in C++11

  • New in C++14

Language Review and Best Practice: Part I

  • Object-Oriented Programming

  • Constructors and Destructors

  • new and delete

  • Basic Inheritance

  • Interface vs. Implementation

  • Type Inheritance

  • Implementation Inheritance

  • Proper Use of C++11 final and override

  • Virtual Destructors: When and Why?

  • Inheritance Guidelines

  • Correct Use of Well Known Language Features

  • Pointers vs. References vs. Value

  • Proper Use of const

  • Proper Use of Inline Functions

  • Proper Use of static

  • Proper Use of Default Parameters

  • Proper Use of friend

  • Proper Use of namespace

  • The C++ Way to Cast

  • Proper Use of friend

  • Proper Use of Operator Overloading

  • Copy Constructor: Why/When?

  • Assignment Operator: Why/When?

  • The Law of The Big Three

Exceptions

  • Lessons from Traditional Error Handling

  • Object-Oriented Error Handling

  • throw, try and catch

  • Design of Exception Hierarchies

  • Proper use of Rethrow

  • Using unexpected

  • Exception Pitfalls

  • Exception Guidelines

Templates

  • Template Classes Definition

  • Template Classes Implementation

  • Parametrized Classes

  • Templates and Non-Type Parameters

  • Template Guidelines

  • Templates and Plain Functions

  • C++ Template Function

Standard Template Library (STL)

  • STL String

  • STL Components

  • Sequence Containers

  • Use of Iterators in STL

  • Example of Algorithms

  • Initialization of Containers

  • Performance Profiles of Sequence Containers

STL Algorithms

  • STL vs Boost

  • Parameterization of Algorithms

  • Using Functions

  • Using Function Objects

  • Using Lambda Expressions

  • Library of Selected Algorithms

  • Contributing Algorithms

STL Associative Containers

  • Set

  • Multiset

  • Map

  • Multimaps

STL Functors, Allocators and More

  • Standard Exception

  • Functors

  • Library Provided Function Objects

Using STL Function Objects and Binders

  • Negators

  • Allocators

  • Complex Number

Smart Pointers

  • auto_ptr (Deprecated)

  • shared_ptr (Deprecated)

  • unique_ptr (Deprecated)

  • weak_ptr (Deprecated)

Efficiency: Temporary Objects

  • Temporary Objects: The Problem

  • Various Techniques to Avoid Temporaries

  • STL String: How to Avoid Creation of Temporaries

  • C++11: Move Semantics

Miscellaneous Techniques to Avoid Temporaries

  • Memory Management

  • How Does C++ Use Memory?

  • Basic Guidelines

  • Implementation of Singletons in C++

  • Efficient Use of Smart Pointers

  • Overloading new and delete

  • The Importance of Data Layout

  • Hot vs. Cold Memory

Miscellaneous Efficiency Techniques

  • Design Concerns

  • Flexibility vs Performance

  • Lazy Evaluation

  • Eager Evaluation

  • Copy on Write Techniques

  • Data Layout Revisited

  • Modern Hardware and Cache Pipelines

  • The Effect of Data Structures and Algorithms

  • Postcondition and C++

  • Efficiency Profiles of Libraries

  • STL and Performance

  • Latency

  • Cost and Benefits of Threads

  • Asynchronous Programming

  • Futures

Delegation

  • Concept of Delegation

  • Delegation in C++

  • Simple Delegation

  • Static Delegation

  • Superclass Delegation

  • Subclass Delegation

  • Issues With Subclass Delegation in C++

  • Object Delegation

  • Strategy Pattern

  • C++ and Strategy

  • State Pattern

  • C++ and State

  • Design of Composite

  • Composite and Delegation

  • Other Delegation Patterns

Decoupling

  • What is Coupling?

  • Kinds of Coupling

  • Identity Coupling

  • Identity Coupling: Object Lifetimes

  • Change of Identity

  • Type Coupling

  • Implementation Coupling

  • Interfaces and Implementations

  • Decoupling by Example

Advanced Inheritance

  • Multiple Inheritance of Interfaces

  • Multiple Inheritance of Implementation

  • Shared Properties

  • Resolving Ambiguity

  • Virtual Inheritance

  • Multi Methods

  • Double Dispatch

  • Use of RTTI

  • Rules and Guidelines

  • Inheritance of Baseclass Methods

  • Change of Methods

  • Contracts and Inheritance

  • Contracts and Subtyping

  • Variations of Method Arguments

  • Rules for Method Arguments

  • Rules for Changing Return Types

  • Cancellations of Methods

Design Heuristics

  • Object-Oriented Design Guidelines

  • Reflecting Client's View

  • Polling

  • Express Interfaces Through Objects

  • Value Objects

  • Class Invariants

  • Abstract Base Classes

  • Classes and Interfaces

  • Design Interfaces Between Base and Derived Classes

  • Classes Cohesiveness

  • Interface Bloat

  • Encapsulation Leakage

© 2020 Northscaler