Advanced C++ Programming Training

We offer private customized training for groups of 3 or more attendees.

Course Description

 
The comprehensive, five-day course consists of three modules. A preliminary module reviews topics, including inheritance, the ANSI C++ Standard Library, templates. I/O streams, and practical issues of C++ programming, such as reliability, testing, efficiency and interfacing to C. This material is covered as needed depending on the background of the students. The second module covers more advanced topics. Advanced issues of inheritance and polymorphism are covered. Principles of effective class design, including the orthodox canonical form, use of composition, templates and interface inheritance. The course covers exception handling and runtime type information (RTTI). Multiple inheritance is covered, including the complications that are introduced by this powerful feature. Advanced applications of C++ concepts are studied, including smart pointers and reference counting. The third module introduces the Standard Template Library (STL). The main components of data structures, algorithms and iterators are covered. Illustrations are provided of a number of important containers, such as vectors, stacks, queues, lists and sets. Extensive programming examples and exercises are provided. A number of progressively developed case studies are used to illustrate object oriented programming techniques and to give the student practical experience in putting together features of C++ learned in the course. A file is provided containing all the examples and laboratory exercises in the course.
Course Length: 5 Days
Course Tuition: $2090 (US)

Prerequisites

Substantial C++ programming experience.

Course Outline

 

Inheritance and Polymorphism
Inheritance Concept
Inheritance in C++
Protected Members
Base Class Initializer List
Composition
Member Initialization List
Order of Initialization
Inheritance vs. Composition
Summary Inheritance
A Case for Polymorphism
Dynamic Binding
Pointer Conversion in Inheritance
Polymorphism Using Dynamic Binding
Virtual Function Specification
Invoking Virtual Functions
VTable
Virtual Destructors
Abstract Class Using Pure Virtual Function
Employee as an Abstract Class
Heterogeneous Collections
Summary Polymorphism

ANSI C++ Library
ANSI C++ Library
Hello ANSI C++
Namespaces
ANSI C++ String Class
Templates

Templates
General Purpose Functions
Macros
Function Templates
Template Parameters
Template Parameter Conversion
Function Template Problem
Generic Programming
General Purpose Classes
Class Templates
Array Class Implementation (array.h)
Using the Array Template
Template Parameters
Class Template Instantiation
Non Type Parameter Conversion
Standard Template Library
STL Components
Generic Programming
STL Elements of a Simple Program
Simple STL Program
Map Container

Input/Output in C++
Input/Output in C++
Built-in Stream Objects
Output Operator <<
Input Operator >>
Character Input
String Input
Formatted I/O
Streams Hierarchy (Simplified)
File I/O
File Opening
Integer File Copy
Character File Copy
Overloading Stream Operators
Implementing Overloaded Stream Operators

Practical Aspects of C++ Programming
Interfacing C++ to Other Languages
Calling C from C++
_cplusplus Macro
Calling C++ from C
Interface Module for Stack Class
Namespace Collisions
ANSI Namespace
Reliability Philosophies of Languages
Prototypes and Type Checking
Constant Types
Access Control in C++
Reviews and Inspections
Inspections and C++
Testing Strategies for C++
Performance Considerations
Class Libraries

Advanced Polymorphism and Inheritance
Good Class Design
String Class
Public Inheritance
Public Inheritance Problems
Inheritance and Semantics
Private Inheritance
Composition
Composition vs. Private Inheritance
Templates vs. Inheritance
Protected Inheritance
Implementation Encapsulation
Interface Inheritance

Exception Handling
Exception Handling
try and catch
Exception Flow of Control
Context and Stack Unwinding
Handling Exceptions in best Context
Benefits of Exception Handling
Unhandled Exceptions
Clean Up
Multiple Catch Handlers

Runtime Type Information
Runtime Type and Polymorphism
type_info Class
typeid Operator
Compiler Options
Safe Pointer Conversions
Dynamic Cast
New C++ Style Casts
Static Cast
Reinterpret Cast
Const Cast
Inheritance Hierarchies and Multiple Inheritance
Class Hierarchy in Smalltalk
Smalltalk Class Hierarchy (Simplified)
Collection Classers
Multiple Inheritance Solution
Basic Derivation
Ambiguities in Multiple Inheritance
Resolving Ambiguity
Duplicate Subobjects
Virtual Base Classes

Applications of C++ Concepts
Orthodox Canonical Form (Review)
Object Validation
String Class
Smart Strings
Reference Counting
Reference Counting Rules
Smart String Pointer
Generic Smart Pointers
Constructing Smart Pointers
Smart Pointer Difficulties

An Overview of Templates
Templates
Overloading Functions
Template Functions
Specializing a Template Function
Disambiguation under Specialization
Template Classes
An Array Template Class
Instantiating a Template Class Object
Friends of Template Classes
Templates with Multiple Type Parameters
Non Class-type Parameters for Template Classes
Comments Regarding Templates
Templates and Inheritance

Overview of STL
Perspective
History and Evolution
New Features
The Standard Template Library
Generic Programming
Design Goals
Header Files
STL Components
Containers
Algorithms
Iterators
Compiling STL Code

Examples from STL
vector
Vector.cpp
list
List.cpp
map
Map.cpp
set
Set.cpp
multiset
Multiset.cpp
find
FindVector.cpp
find list
merge
Overriding the Default Comparison
Iterators
Iterators.cpp
Functions
Functions.cpp
Function Objects
FunctionObject.cpp

STL Containers
Vectors
Vector.cpp
Vector Operations
Typedefs
Deques
deque as Stack
deque Functionality
Lists
Generic Programming
Tradeoff with Lists
List Memory Allocation
list Functionality
Associate Containers
Sets
Sets with User Defined Objects
Multisets (Bags)
Maps
Multimaps

STL Iterators
Pointers
Template Version
String Version
A Generalization of Pointers
STL Iterators
Input Iterators
Output Iterators
Forward Iterators
Bidirectional Iterators
Random Access Iterators
 

Course Directory [training on all levels]

Upcoming Classes
Gain insight and ideas from students with different perspectives and experiences.

C++ Uses & Stats

C++ is Used For:
Software Development Search Engines Operating Systems Video Games
Difficulty
Popularity
Year Created
1983
Pros
Popular: 
C/C++ is everywhere. In particular, they power more technologies than we give it credit for.
 
Flexible:
C++ is a multi-paradigm coding language. This means that it supports other styles such as procedural programming as well as Object-Oriented Programming. 
 
Fast: 
Because it is compiled, C++ gains a lot of speed. and is the language of choice for some applications as an example in the finance industry, where small differences in speed in high-frequency trading platforms can make the difference between a profit or a loss.
 
Job Opportunities: 
C++ developers are high in demand. There are over 14,000 C++ open positions on linkedIn alone. 
 
Similarity to Other Languages: 
Many other languages like C, C#, and Java have very similar syntax to C++, making them easy to learn for those that already know C++.
Cons
Difficult to Learn:  
C++ syntax is complex and the standard library is small, making C++ difficult to learn for someone with little programming experience. Although, it's believed to be more difficult to learn C++ than other languages, more accurately it probably takes a bigger investment of your time and effort to learn than some other languages. 
 
Strict Syntax: 
There is not much flexibility to the syntax, so it can be difficult to write code in a readable way.
 
Little Memory Management:
C++ does very little memory management, forcing the programmer to do most of it themselves.
 
Debugging Issues:
C++ can be difficult and complex to debug when it is used for web applications. 
C++ Job Market
Average Salary
104000
Job Count
32816
Top Job Locations

New York City 
Seattle 
San Francisco 

Complimentary Skills to have along with C++

C/C++ are the grandfather of most other languages. Once you understand C syntax and (OOP) Object Oriented Programming, you're well on your way to greener pastures. 

Since the .NET development ecosystem spans a wide array of capabilities and tools, it is difficult for .NET developers to know which .NET development skills and training to pursue in order to increase their marketability — and earning potential.  For that reason, learning supplemental languages such as Java, JavaScript, Python, C/C++, and others is expected in today’s competitive skill-set driven playing field.

Interesting Reads Take a class with us and receive a book of your choosing for 50% off MSRP.