C++ templates allow functions and classes to operate on multiple types of data. Templates define placeholders that are substituted by template arguments. This allows defining functions and classes once that can work with different data types. Function templates define a single function that generates multiple versions based on the template arguments. Class templates generate distinct classes from a single definition. Exceptions represent errors and are thrown using throw statements. Exception handlers use try-catch blocks to catch exceptions and provide error handling.