Advanced C++ for Experts - Design Patterns, STL, C++11/C++14 Training
We offer private customized training for groups of 3 or more attendees.
|
||
Course Description |
||
This 2-day intensive Advanced C++ class is designed to coach the experienced C++ developer on enterprise system C++ coding and design standards. Students will be given a review of Polymorphism, Virtual Functions, Function Pointers and Multiple Inheritance. A solid introduction to Design Patterns follows. Once we have laid the groundwork, the training nicely dovetails into a thorough introduction to the STL and new topics in C++11/C++14.
Course Length: 2 Days
Course Tuition: $1890 (US) |
Prerequisites |
|
Solid understanding of Object Oriented programming with a minimum of 2 years of C++ development experience. |
Course Outline |
Review
Templates
Function Templates
Class Templates
Function Objects
Design Pattern Overview
Objectives in Software Design/Module Design
Overview of Patterns
Qualities of a Pattern
Pattern Systems
Heuristics vs. Patterns
Principles of Object-Oriented Design
Overview of Principles
Single-Responsibility Principle (SRP)
Open-Closed Principle (OCP)
Tell vs. Ask
Command/Query Separation (CQS)
Composed Method
Combined Method
Liskov Substitution Principle (LSP)
Dependency Inversion Principle (DIP)
Interface Segregation Principle (ISP)
Law of Demeter
Catalog of GoF Patterns
Overview of GoF Patterns
Introduction to Creation Patterns
Factory Method
Abstract Factory
Builder
Prototype
Singleton
Introduction to Structural Patterns
Adapter
Decorator
Proxy
Facade
Composite
Flyweight
Bridge
Summary of Structural Patterns
Introduction to Behavioral Patterns
Chain of Responsibility
Iterator
Strategy
Template Method
Mediator
Observer
Memento
Command
State
Visitor
Interpreter
Other Micro-Architecture and System Patterns
Object Pool
Worker Thread
Dynamic Linkage
Cache Management
Type Object
Extension Object
Smart Pointer (C++)
Session
Transaction
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
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
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
C++11/C++14 Highlights
Range-based for-loops
RValues and move semantics
Initializer lists
Variadic Templates
Lambda Foundations
Generic lambdas
Extended capture
Lambda Iterator concept
Lambda Containers
Lambda Functions
|
Course Directory [training on all levels]
Technical Training Courses
Software engineer/architect, System Admin ... Welcome!
- .NET Classes
- Agile/Scrum Classes
- Ajax Classes
- Android and iPhone Programming Classes
- Blaze Advisor Classes
- C Programming Classes
- C# Programming Classes
- C++ Programming Classes
- Cisco Classes
- Cloud Classes
- CompTIA Classes
- Crystal Reports Classes
- Design Patterns Classes
- DevOps Classes
- Foundations of Web Design & Web Authoring Classes
- Git, Jira, Wicket, Gradle, Tableau Classes
- IBM Classes
- Java Programming Classes
- JBoss Administration Classes
- JUnit, TDD, CPTC, Web Penetration Classes
- Linux Unix Classes
- Machine Learning Classes
- Microsoft Classes
- Microsoft Development Classes
- Microsoft SQL Server Classes
- Microsoft Team Foundation Server Classes
- Microsoft Windows Server Classes
- Oracle, MySQL, Cassandra, Hadoop Database Classes
- Perl Programming Classes
- Python Programming Classes
- Ruby Programming Classes
- Security Classes
- SharePoint Classes
- SOA Classes
- Tcl, Awk, Bash, Shell Classes
- UML Classes
- VMWare Classes
- Web Development Classes
- Web Services Classes
- Weblogic Administration Classes
- XML Classes
Business Training Courses
Project Managers, Business Analysts, Paralegals ... Welcome!
Upcoming Classes
Gain insight and ideas from students with different perspectives and experiences.
- Working with Elastic Search
20 November, 2024 - 21 November, 2024 - ASP.NET Core MVC, Rev. 6.0
11 November, 2024 - 12 November, 2024 - Artificial Intelligence Implementation Boot Camp
8 November, 2024 - 8 November, 2024 - Ruby Programming
2 December, 2024 - 4 December, 2024 - VMware vSphere 8.0 Boot Camp
9 December, 2024 - 13 December, 2024 - See our complete public course listing
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
|
Job Count
|
Top Job Locations
New York City |
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. |