Delivery Options: Attend face-to-face in the classroom, remote-live or via on-demand training.
Pricing
Face-to-face or remote-live: £1945
On-demand: £1145
Discounts: We offer multiple discount options. Click here for more information.
Duration
Face-to-face or remote-live: 5 Days
On-demand: Approximately 35 hours of coursework with personal facilitation, to be completed in a four week span.
Registration
Face-to-face: Click here to view our schedules and register for in-person sessions.
Remote-live: Click here to register for live remote class sessions within a date range of your choosing.
On-demand: Click here to register for on-demand training with personal facilitation, on a start date of your choosing.
Course Description
This hands on C++ programming course provides an accelerated introduction to the most essential syntactical components of the C and C++ languages on the first day, prior to four days of focus on object-oriented programming with C++. The C++ programming training begins by introducing the built in data types, fundamental control constructs, and rich expression operator repertoire common to both C and C++.
The central concepts of C++ syntax and style are taught in the context of using object-oriented methods to achieve reusability, adaptability and reliability. Emphasis is placed on the features of C++ that support abstract data types, inheritance, and polymorphism. Students will learn to apply the process of data abstraction and class design. Practical aspects of C++ programming including efficiency, performance, testing, and reliability considerations are stressed throughout. Comprehensive hands on exercises are integrated throughout to reinforce learning and develop real competency.
Students who are already familiar with C language syntax may want to take the 4-day C++ Programming for C Programmers course instead.
Prior programming experience is required to learn C++ programming.
ANSI C++ Fundamentals
- Block Structure of C and C++ Programs
- Fundamentals of Syntax
- Built in Data Types
- The Preprocessor and Macros
- Standard Runtime Libraries and Header Files
|
Data Types, Storage, Classes, and Scope
- Data Types and Qualifiers
- Constants and String Literals
- Static versus Automatic Storage
- Scope and Variables
- Initialization Rules
|
Operators and Expressions
- Arithmetic, Logical, and Bit Operators
- Precedence and Associativity
- Assignment
- Type Conversion Rules
- Type Casting
|
Flow Control Constructs
- Conditional Constructs: if, switch
- Looping Constructs: while, do, for
- Programming Style
|
Pointers
- Advantages of Pointers
- Uses of Pointers
- Declaring Pointers
- Pointer and Address Arithmetic
- Initializing and Dereferencing Pointers
- Pointers vs. Arrays
|
Functions
- Purpose of Functions
- Functions versus Inlining
- The Argument Stack
- Passing by Value
- Passing by Reference
- Declaring External Functions
- Function Prototyping
|
Moving from C to C++
- New Compiler Directives
- Stream Console I/O
- Explicit Operators
- Standard Libraries
- Data Control Capabilities
|
Handling Data
- New Declaration Features
- Initialization and Assignment
- Enumerated Types
- The bool Type
- Constant Storage
- Pointers to Constant Storage
- Constant Pointers
- References
- Constant Reference Arguments
- Volatile Data
- Global Data
|
Functions
- Function Prototypes and Type Checking
- Default Function Data Types
- Function Overloading
- Problems with Function Overloading
- Name Resolution
- Promotions and Conversions
- Call by Value
- Reference Declarations
- Call-by-Reference and Reference Types
- References in Function Return
- Constant Argument Types
- Conversion of Parameters Using Default Initializers
- Providing Default Arguments
- Inline Functions
|
Creating and Using Objects
- Creating Automatic Objects
- Creating Dynamic Objects
- Calling Object Methods
- Constructors
- Initializing Member consts
- Initializer List Syntax
- Allocating Resources in Constructor
- Destructors
- Block and Function Scope
- File and Global Scope
- Class Scope
- Scope Resolution Operator ::
- Using Objects as Arguments
- Objects as Function Return Values
- Constant Methods
- Containment Relationships
|
Dynamic Memory Management
- Advantages of Dynamic Memory Allocation
- Static, Automatic, and Heap Memory
- Free Store Allocation with new and delete
- Handling Memory Allocation Errors
|
Controlling Object Creation
- Object Copying and Copy Constructor
- Automatic Copy Constructor
- Conversion Constructor
|
Inheritance
- Inheritance and Reuse
- Composition vs. Inheritance
- Inheritance: Centralized Code
- Inheritance: Maintenance and Revision
- Public, Private and Protected Members
- Redefining Behavior in Derived Classes
- Designing Extensible Software Systems
- Syntax for Public Inheritance
- Use of Common Pointers
- Constructors and Initialization
- Inherited Copy Constructors
- Destructors and Inheritance
- Public, Protected, Private Inheritance
|
Streaming I/O
- Streams and the iostream Library
- Built-in Stream Objects
- Stream Manipulators
- Stream Methods
- Input/Output Operators
- Character Input
- String Streams
- Formatted I/O
- File Stream I/O
- Overloading Stream Operators
- Persistent Objects
|
Introduction to Object Concepts
- The Object Programming Paradigm
- Object-Orientated Programming Definitions
- Information Hiding and Encapsulation
- Separating Interface and Implementation
- Classes and Instances of Objects
- Overloaded Objects and Polymorphism
|
Templates
- Purpose of Template Classes
- Constants in Templates
- Templates and Inheritance
- Container Classes
- Use of Libraries
|
Strings in C++
- Character Strings
- The String Class
- Operators on Strings
- Member Functions of the String Class
|
Exceptions
- Types of Exceptions
- Trapping and Handling Exceptions
- Triggering Exceptions
- Handling Memory Allocation Errors
|
C++ Program Structure
- Organizing C++ Source Files
- Integrating C and C++ Projects
- Using C in C++
|
Reliability Considerations
in C++ Projects
- Function Prototypes
- Strong Type Checking
- Constant Types
- C++ Access Control Techniques
|
Polymorphism in C++
- Definition of Polymorphism
- Calling Overridden Methods
- Upcasting
- Accessing Overridden Methods
- Virtual Methods and Dynamic Binding
- Virtual Destructors
- Abstract Base Classes and Pure Virtual Methods
|
Multiple Inheritance
- Derivation from Multiple Base Classes
- Base Class Ambiguities
- Virtual Inheritance
- Virtual Base Classes
- Virtual Base Class Information
|
Declaring and Defining Classes
- Components of a Class
- Class Structure
- Class Declaration Syntax
- Member Data
- Built-in Operations
- Constructors and Initialization
- Initialization vs. Assignment
- Class Type Members
- Member Functions and Member Accessibility
- Inline Member Functions
- Friend Functions
- Static Members
- Modifying Access with a Friend Class
|
Operator Overloading
- Advantages and Pitfalls of Overloading
- Member Operator Syntax and Examples
- Class Assignment Operators
- Class Equality Operators
- Non-Member Operator Overloading
- Member and Non-Member Operator Functions
- Operator Precedence
- The this Pointer
- Overloading the Assignment Operator
- Overloading Caveats
|
The Standard Template Library
- STL Containers
- Parameters Used in Container Classes
- The Vector Class
- STL Algorithms
- Use of Libraries
|
|
Great instructor! Excellent and engaging lecturer. Very clear and drew comparisons between C++ and other programming languages to highlight C++ strengths/weaknesses. Clearly knowledgably on the subject. Course booklet and labs were well-written. Awesome C++ course.
— L.B., Amadeus North America
Wow. What an amazing course. Thank you! This course exceeded my expectations and will help me do my job much more effectively. I will certainly recommend HOTT to my colleagues!
— A.A., Chevron
I was very happy with the course. I learned what I wanted to about C++ and the exercises helped reinforce my learning. The instructor was very helpful and having a knowledgeable person to ask questions to was an invaluable resource.
— J.M., Agilent Technologies
Choose a city below to view a schedule and registration options. If you have any questions, please call us at 1.800.413.0939 between 9:00 am - 5:00 pm Eastern Standard Time.