Advanced C++
Duration: 5 days
Description:
Advanced C++ Training course offers a comprehensive coverage of the advanced features of the C++ language.
The course starts with basic OO concepts, 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