We will focus on language features supporting data abstraction, object oriented programming and generic programming. In the first part of our course we will study the subset of C++ that supports the styles of programming traditionally done in C. It covers fundamental types, expressions and control structures for C++. Modularity will be discussed, as supported by namespaces, source files and exception handling. In the second part, we’ll introduce C++ facilities for defining and using new types. Concrete and abstract types (classes), together with operator overloading, polymorphism and the use of class hierarchies. We’ll also study templates for defining families of types and functions. Moreover, we’ll work on exception handling, standard library and input/output mechanisms supported by C++.