Overview of Advanced C++ Programming Training
- This comprehensive, five-day course consists of three modules:
- A preliminary segment reviews topic which includes inheritance, the ANSI C++ Standard Library, templates. Input and Output streams, and practical issues of C++ programming, such as reliability, testing, efficiency and interfacing to C.
- The material is covered as needed depending on the background of the participants
- The second segment covers advanced topics like advanced issues of inheritance and polymorphism, Principles of effective class design, including the orthodox canonical form, use of composition, templates and interface inheritance
- This course covers exception handling and runtime type information – RTTI. Several inheritances are covered, including the complications that are introduced by this powerful feature
- Concepts of Advanced applications of C++ are studied, including smart pointers and reference counting
- The third segment introduces the Standard Template Library (STL). The components of algorithms , data structures and iterators are covered, Illustrations are provided a number of important containers, such as vectors, stacks, queues, lists and sets. Extensive programming examples and exercises are provided.
Duration
5 Days
Prerequisite for Advanced C++ Programming Training
Prior experience in C++
Course Outline for Advanced C++ Programming Training
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
- 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 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<T> 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