Next Level C++ | Effective C++ Programming (TTD2150)

COURSE OUTLINE:

Description

Effective C++ is a lab-intensive, hands-on C++ training course geared for experienced C++ programmers who wish to take their development skills to the next level.� Students will leave this course armed with the required skills to put advanced C++ programming skills right to work in a practical environment, using sound coding techniques and best practices.�

This comprehensive 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 run-time 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.

Audience

This is an intermediate level development course designed for developers with prior C++ programming experience.� Students without prior C++ programming background should take the pre-requisite training.

Prerequisites

Geared for beginners without any prior experience in computer programming, this course will teach students everything they need to become productive in basic level Java programming.� Special emphasis is placed on object-oriented concepts and practices throughout the entire course. Attending students should have recently attended the following course(s) or have practical experience in this area:

  • TTE9700 Introduction to C++ Programming

Learning Objectives

  • Working within an engaging, hands-on learning environment, attendees will explore:
  • Inheritance and Polymorphism
  • ANSI C++ Library
  • Templates
  • Input/Output in C+
  • Practical Aspects of C++ Programming
  • Advanced Polymorphism and Inheritance
  • Exception Handling
  • Runtime Type Information
  • Inheritance Hierarchies and Multiple Inheritance
  • Applications of C++ Concepts
  • An Overview of Templates
  • Overview of STL
  • Examples from STL
  • STL Containers
  • STL Iterators

Lesson 1. Moving from C to C++ (Optional)

  • New Compiler Directives
  • Stream Console I/O
  • Explicit Operators
  • Standard Libraries
  • Data Control Capabilities

�

Lesson 2. 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

�

Lesson 3.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

Lesson 4.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

Lesson 5. 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

Lesson 6. Dynamic Memory Management

  • Advantages of Dynamic Memory Allocation
  • Static, Automatic, and Heap Memory
  • Free Store Allocation with new and delete
  • Handling Memory Allocation Errors
  • Lesson 7. Controlling Object Creation
  • Object Copying and Copy Constructor
  • Automatic Copy Constructor
  • Conversion Constructor

Lesson 8. 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

Lesson 9. 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

Lesson 10. 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

Lesson 11. Templates

  • Purpose of Template Classes
  • Constants in Templates
  • Templates and Inheritance
  • Container Classes
  • Use of Libraries

Lesson 12. Strings in C++

  • Character Strings
  • The String Class
  • Operators on Strings
  • Member Functions of the String Class

Lesson 13. 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

Lesson 14. Exceptions

  • Types of Exceptions
  • Trapping and Handling Exceptions
  • Triggering Exceptions
  • Handling Memory Allocation Errors

Lesson 15. C++ Program Structure

  • Organizing C++ Source Files
  • Integrating C and C++ Projects
  • Using C in C++
  • Lesson 16. Reliability Considerations in C++ Projects
  • Function Prototypes
  • Strong Type Checking
  • Constant Types
  • C++ Access Control Techniques

Lesson 17. 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

Lesson 18. Multiple Inheritance

  • Derivation from Multiple Base Classes
  • Base Class Ambiguities
  • Virtual Inheritance
  • Virtual Base Classes
  • Virtual Base Class Information

Lesson 19. The Standard Template Library

  • STL Containers
  • Parameters Used in Container Classes
  • The Vector Class
  • STL Algorithms
  • Use of Library