Using Exception Handling
The three keywords designed for exception handling in C++ are
try, catch, and throw.
The steps required to implement an exception handler are:
- Functions that are expected to be used by many programs
are coded so that, when an error is detected, an
exception is thrown. The throw expression generally
throws an object. It may be created explicitly for
purposes of exception handling, or it may be the object
that caused the error to be detected. An example of
throwing the problem object:
.
.
.
int input=0;
cout << "Enter a number between 1 and 10:";
cin >> input;
if (input < 1 || input >> 10);
throw(input); //throw the actual problem object
.
.
.
The following is an example of throwing an object for
the purpose of exception handling:
.
.
.
int input=0;
cout << "Enter a number between 1 and 10:;
cin >> input;
if (input < 1 || input >> 10)
throw(out_of_range_object); //throw object to tell handler
//what happened
- Exceptions are anticipated in a caller by means of a try
statement. Function calls that you anticipate might
produce an exception must be en closed in braces and
preceded by the keyword try.
- Immediately following the try block, you must code one or
more catch blocks. Each catch block identifies what type
or class of objects it can catch:
- If the object thrown matches the type of a catch
expression, control passes to that catch block.
- If the object thrown does not match the first
catch block, subsequent catch blocks are searched
for a matching type.
- If no match is found, the search continues in all
enclosing try blocks and then in the code that
called the current function.
- If no match is found after all try blocks are
searched, a call to terminate() is made.
Notes:
- Any object can be thrown if it can be copied and
destroyed in the function from which the throw occurs.
- Exceptions should never be thrown from a C language
signal handler. The result is undefined, and can cause
program termination.
A catch argument causes an error if it is a value argument , and
a copy of it cannot be generated. Similarly, a throw expression
causes an error if a copy of the value of the expression being
thrown cannot be generated.
![](../images/ngrelc.gif)
C++ Exception Handling
Overview
Formal and Informal Exception
Handling
![](../images/ngrelt.gif)
Example of an Incorrect catch
Argument
![](../images/ngrelr.gif)
Syntax of Exception Handling Keywords
Transferring Control
Exception Specifications
unexpected() and terminate() Functions
Page Space Errors During Compilation