Advanced C++ — A 5 day course
C++ is possibly the richest programming language in common use, and it allows programmers to write code using three distinct styles: procedural, object-oriented, and generic.
This course is aimed to take C++ programmers to a new level of understanding and competence in their use of the C++ language and libraries.
The course is divided into five parts: the first builds on existing knowledge, showing how to use basic language features correctly, and delegates will probably discover a number of things that they hadn't appreciated about the language and its use.
The second section of the course covers templates, the language feature that underlies the Standard Template Library and most recent advances in C++. It is not an exaggeration to say that a thorough understanding of templates is essential in order to be a modern C++ programmer.
The third part majors on OO development, and shows how popular idioms and design patterns can be implemented in C++.
The final two sections look at the two main libraries used by C++ programmers today: the Standard Template Library and the Boost libraries. The course will introduce both libraries, discuss their main features, and show how to use them.
Using Language Features Correctly
Const and Casting
- Const correctness
- Overloading on const
- C++ cast operators
Conversions and Scope
- Standard conversions
- Converting constructors
- User defined conversions
- Koenig lookup
- Nested types
Proper Exception Handling
- Throwing and catching correctly
- Exception safe code
- The new handler
- Placement new
- Overloading new and delete
- What are templates?
- Implementing template functions
- Template instantiation
- Creating a template class
- Class instantiation
- Non-type template parameters
- A brief introduction to metaprogramming
C++ Idioms and Design Patterns
Implementing Value Types
- What are value types?
- Construction and destruction
- Copying and assignment
- Operator overloading
The Handle/body Idiom
- The Bridge design pattern
- Using Bridge to decouple compilation
- Implementing handle/body
- What are functors?
- Implementing functors using operator overloading
- What are smart pointers?
- Uses of smart pointers in C++
- Implementing a simple smart pointer
- Reference counting and smart pointers
- The Singleton design pattern
- A naïve implementation
- Problems with Singleton in C++
- Controlling Singleton lifetime
Standard Template Library
- Concept-based programming
- Containers, iterators and algorithms
- Sequence containers
- Associative containers
- The need for traits
- Implementation of traits in STL
- The Iterator design pattern
- Iterator concepts in C++
- Iterators and containers
- Implementing and using iterators
- Stream iterators
- The STL standard algorithms
- Creating and using algorithms
The Boost Libraries
Introduction to Boost
- What is Boost?
- Obtaining and installing Boost
- Overview of the Boost libraries
Common Boost Libraries
- The Boost smart pointers
Unlike some "advanced" courses, this one does cover complex and advanced material.
It is essential that delegates possess a good basic knowledge (and have practical experience) of OO programming in C++.
As well as being comfortable with the basic syntax, you should be familiar with declaring, defining and using classes, inheritance, and dynamic memory management.
The class involves a lot of practical work, so delegates should come along prepared to get coding. The course can be run using either GCC on Linux (or OS X), or Microsoft Visual Studio on Windows.