Software engineers, programmers, and analysts who have been designing and creating programs using C++ and desire a higher level of technical detail to allow them more flexibility and productivity when writing C++ programs. Anyone desiring the ability to read and understand complex C++ programs for maintenance or learning purposes.
A Review of C++ and Classes
Why Object-Oriented Programming?
Nested Classes and Structures
const
and static
Members
The mutable
Keyword (likely a new topic for many students)
explicit
constructors (likely a new topic for many students)
How Virtual Functions are Implemented (vptr
and vtbl
details)
Name Mangling
Pointers to Class Members (likely a new topic for many students)
Operator Overloading in Detail
Overview
Semantic Consistency
Member-only Operators
Non-member-only Operators
Implementation Details
Recommendations When Using Operator Overloading
Template Classes and Functions
What Problem Do Templates Solve?
Template Instantiation
Template Parameters (and default parameters)
Function Templates
Template Specialization
Function Objects (a.k.a. functors)
Organizing Source Code to be "Template-friendly"
Overview of the Standard Template Library (STL)
Streams-based IO
Stream IO vs. File IO
Design of the C++ IO Subsystem
Output Formatting
Stream Buffering
Application Interface
Adding Overloaded IO Operators
Using File IO Objects
Using String Streams
Inheritance
What Is (and Why Use) Inheritance?
Abstract Base Classes
Multiple Inheritance and Virtual Base Classes
Method Disambiguation
Functional Separation
Implementation Details
Overview of the Standard Template Library
What is the Standard Template Library?
Which Container Classes are Provided?
Which Iterator Types are Provided?
Which Generic Algorithms are Provided?
Examples
Auto Pointers
Miscellaneous Topics
Iterator Concepts
Exception Handling (and when to use them or not use them)
New-style Casts
Run-time Type Identification
Implementing the Gang of Four Design Patterns in C++
Creational Patterns
Abstract Factory
Builder
Factory Method
Prototype
Singleton
Structural Patterns
Adapter
Bridge
Composite
Decorator
FaE<cedilla>ade
Flyweight
Proxy
Behavioural Patterns
Chain of Responsibility
Command
Interpreter
Iterator
Mediator
Memento
Observer
State
Strategy
Template (Template Method)
Visitor
Upon completion of this course, the student will be able to:
Point out the areas where hidden class members can cause hard-to-find bugs
Write easier-to-read and easier-to-use code using operator overloading
Understand how templates can reduce code replication when used properly
Perform file input-output, and describe the concepts of persistent objects
Understand issues in using virtual base classes and multiple inheritance
Better utilize the features of inheritance and polymorphism in program design
Use and understand the techniques of exception handling in C++
Describe when and how to use run-time type identification, the mutable
keyword, and other language features
Students are invited to bring their current ideas and questions to the classroom for discussion. Lecture, group problem solving, and online laboratories will be used. Students will be encouraged to enhance their skills utilizing the techniques presented through classroom problem solving and controlled online workshops. This course is approximately 40% labwork.
This course does not concentrate on the use of any one particular development tool. Instead, the students are encouraged to learn the proper design and implementation techniques by hand-coding their applications. If development tools are available in the classroom, the instructor can demonstrate their use and guide the students in the use of such tools, if desired. Please specify when booking which tools the customer would like discussed.
Some very old compilers do not support features discussed in this course (although only cursory coverage of C++11 is provided). We have a Unix-style script that will compile and test the lab solutions on your system as a way to ensure the compatibility of your compiler with this course. (We primarily test using the latest GNU GCC.)
This course teaches the student how to solve problems arising from subtleties of the C++ language, as well as techniques for improving performance and efficiency. Therefore, programming experience in C++ for at least 3 months is preferred for the student to gain the maximum benefit from this course, although experience in other object-oriented programming languages may suffice. The students should be familiar with the editors available on the lab equipment as they will be creating many source code files. Some prior experience with the compiler used in the lab is helpful, but not required. Contact our office with any questions.