TENTATIVE TOPICS * procedural programming review * object-based programming review * UML diagrams: class, object, state * object-oriented programming - inheritance - polymorphism and virtual functions - overloading and overriding - abstact operations and classes - private vs. public inheritance, multiple inheritance - type covariance - implementation hiding/PIMPL idiom, nested classes - push and pull communication methods between objects - double dispatch - smart pointers - delegation * design patterns - singleton - abstract factory/factory method - template method - bridge - adapter - prototype - state - chain of responsibility - observer - decorator - strategy - command - memento - visitor - composite - flyweight * generic programming - iterators - templates - implementing design patterns using templates - metaprogramming * programming with standard template library - containers - generic algorithms - extending STL * C++ concepts - casting - (forward) class declaration, elaborated type specifier