Exceptions are an error handling mechanism built into C++. They are handled through the mechanism of try and catch blocks.
Pure Virtual Functions
Pure virtual functions are functions that are not implemented in the base class but must be implemented in a concrete derived class.
Dynamic Casts
Dynamic casts allow us to transform from a base class to a derived class and perform non-polymorphic actions on it.
Polymorphism
Basically, polymorphism is a base pointer or reference managing a derived class.
Inheritance
Inheritance is a method of code reuse. It works by having a class extend another.
Overloading Logical Operators
Overriding logical operators allows us to compare and order things. Logical operators are binary operators and the same rules apply as for other binary operators.
Operator Overloading
Operator overloading allows us to have our classes work with the C++ standard operators, such as +, <<. and >>. This has the effect of making our classes more natural to use and they feel like part of the language.
Smart Pointers
Smart pointers are modern C++ solving the main problem with raw pointers, memory management and remembering to free heap memory with delete. They should be preferred in any new program.
Linkages, Extern, and Inline
Linkage describes the visibility of variable and function names across translation units. Extern and inline are ways to manipulate that visibility.
Namespaces
Namespaces are like packages in Java, they allow you have the the same function signature multiple times.
Static Variables
Static variables are variables that are not tied to a particular instance, rather they are tied to the class. This means all instances share a copy of static member variables.
Friend functions and classes
Friend functions and classes are external functions or classes which are granted access to all members of a class. To my mind, this breaks encapsulation and shouldn’t be done. Maybe that’s just my years of Java speaking. Maybe I just need to get used tot eh C++ way of doing things.