0% found this document useful (0 votes)
25 views9 pages

7.exception Handling

Download as pdf or txt
Download as pdf or txt
Download as pdf or txt
You are on page 1/ 9

5/14/2014

Lecture 8 Exception
Handling (C++)
CS162 Object Oriented Programming
Lecture adapted from Imran Ihsan
C++ How to Program (9th Edition) www.imranihsan.com
By Paul Deitel and Harvey Deitel
Prentice Hall, Inc. All rights reserved. OOP 08 - Exception
imranihsan.com
Handling

+ 8.1 Introduction

Exceptions
Indicates problem occurred in program
Not common
An "exception" to a program that usually works

Exception Handling
Resolve exceptions
Program may be able to continue
Controlled termination
Write fault-tolerant programs
As an example, we will handle a divide-by-zero error

imranihsan.com OOP 08 - Exception Handling

1
5/14/2014

+ 8.2 Exception-Handling Overview

Consider pseudocode
Perform a task
If the preceding task did not execute correctly
Perform error processing
Perform next task
If the preceding task did not execute correctly
Perform error processing

Mixing logic and error handling


Can make program difficult to read/debug
Exception handling removes error correction from "main line" of
program

imranihsan.com OOP 08 - Exception Handling

+ 8.2 Exception-Handling Overview

Exception handling
For synchronous errors (divide by zero, null pointer)
Cannot handle asynchronous errors (independent of program)
Disk I/O, mouse, keyboard, network messages
Easy to handle errors

Terminology
Function that has error throws an exception
Exception handler (if it exists) can deal with problem
Catches and handles exception
If no exception handler, uncaught exception
Could terminate program

imranihsan.com OOP 08 - Exception Handling

2
5/14/2014

+ 8.2 Exception-Handling Overview

C++ code
try {
code that may raise exception
}
catch (exceptionType){
code to handle exception
}

try block encloses code that may raise exception


One or more catch blocks follow
Catch and handle exception, if appropriate
Take parameter; if named, can access exception object

imranihsan.com OOP 08 - Exception Handling

+ 8.2 Exception-Handling Overview

Throw point
Location in try block where exception occurred
If exception handled
Program skips remainder of try block
Resumes after catch blocks
If not handled
Function terminates
Looks for enclosing catch block (stack unwinding, 13.8)
If no exception
Program skips catch blocks

imranihsan.com OOP 08 - Exception Handling

3
5/14/2014

+ 8.3 Other Error-Handling Techniques

Ignore exception
Typical for personal (not commercial) software
Program may fail

Abort program
Usually appropriate
Not appropriate for mission-critical software

Set error indicators


Unfortunately, may not test for these when necessary

Test for error condition


Call exit (<cstdlib>) and pass error code

imranihsan.com OOP 08 - Exception Handling

+ 8.3 Other Error-Handling Techniques

setjump and longjump


<csetjmp>
Jump from deeply nested function to call error handler
Can be dangerous

Dedicated error handling


new can have a special handler
Discussed Later

imranihsan.com OOP 08 - Exception Handling

4
5/14/2014

+ 8.4 Simple Exception-Handling Example:


Divide by Zero
Keyword throw
Throws an exception
Use when error occurs
Can throw almost anything (exception object, integer, etc.)
throw myObject;
throw 5;

Exception objects
Base class exception ( <exception> )
Constructor can take a string (to describe exception)
Member function what() returns that string

imranihsan.com OOP 08 - Exception Handling

+ 8.4 Simple Exception-Handling Example:


Divide by Zero
Upcoming example
Handle divide-by-zero errors

Define new exception class


DivideByZeroException
Inherit from exception

In division function
Test denominator
If zero, throw exception (throw object)

In try block
Attempt to divide
Have enclosing catch block
Catch DivideByZeroException objects

imranihsan.com OOP 08 - Exception Handling

5
5/14/2014

+ 1 // Fig. 13.1: fig13_01.cpp


2 // A simple exception-handling example that checks for
3 // divide-by-zero exceptions.
4 #include <iostream>
5
6 using std::cout;
7 using std::cin;
8 using std::endl;
9
10 #include <exception>
11
12 using std::exception;
13
14 // DivideByZeroException objects should be thrown by functions
15 // upon detecting division-by-zero exceptions
16 class DivideByZeroException : public exception {
17
18 public:
19
20 // constructor specifies default error message
21 DivideByZeroException::DivideByZeroException()
22 : exception( "attempted to divide by zero" ) {}
23
24 }; // end class DivideByZeroException
25

imranihsan.com OOP 08 - Exception Handling

+ 26 // perform division and throw DivideByZeroException object if


27 // divide-by-zero exception occurs
28 double quotient( int numerator, int denominator )
29 {
30 // throw DivideByZeroException if trying to divide by zero
31 if ( denominator == 0 )
32 throw DivideByZeroException(); // terminate function
33
34 // return division result
35 return static_cast< double >( numerator ) / denominator;
36
37 } // end function quotient
38
39 int main()
40 {
41 int number1; // user-specified numerator
42 int number2; // user-specified denominator
43 double result; // result of division
44
45 cout << "Enter two integers (end-of-file to end): ";
46

imranihsan.com OOP 08 - Exception Handling

6
5/14/2014

+ 47 // enable user to enter two integers to divide


48 while ( cin >> number1 >> number2 ) {
49
50 // try block contains code that might throw exception
51 // and code that should not execute if an exception occurs
52 try {
53 result = quotient( number1, number2 );
54 cout << "The quotient is: " << result << endl;
55
56 } // end try
57
58 // exception handler handles a divide-by-zero exception
59 catch ( DivideByZeroException &divideByZeroException ) {
60 cout << "Exception occurred: "
61 << divideByZeroException.what() << endl;
62
63 } // end catch
64
65 cout << "\nEnter two integers (end-of-file to end): ";
66
67 } // end while
68
69 cout << endl;
70
71 return 0; // terminate normally
72
73 } // end main

imranihsan.com OOP 08 - Exception Handling

+
Enter two integers (end-of-file to end): 100 7
The quotient is: 14.2857

Enter two integers (end-of-file to end): 100 0


Exception occurred: attempted to divide by zero

Enter two integers (end-of-file to end): ^Z

imranihsan.com OOP 08 - Exception Handling

7
5/14/2014

+ 8.5 Rethrowing an Exception

Rethrowing exceptions
Use when exception handler cannot process exception
Can still rethrow if handler did some processing
Can rethrow exception to another handler
Goes to next enclosing try block
Corresponding catch blocks try to handle

To rethrow
Use statement "throw;"
No arguments
Terminates function

imranihsan.com OOP 08 - Exception Handling

+ 1 // Fig. 13.2: fig13_02.cpp


2 // Demonstrating exception rethrowing.
3 #include <iostream>
4
5 using std::cout;
6 using std::endl;
7
8 #include <exception>
9
10 using std::exception;
11
12 // throw, catch and rethrow exception
13 void throwException()
14 {
15 // throw exception and catch it immediately
16 try {
17 cout << " Function throwException throws an exception\n";
18 throw exception(); // generate exception
19
20 } // end try
21
22 // handle exception
23 catch ( exception &caughtException ) {
24 cout << " Exception handled in function throwException"
25 << "\n Function throwException rethrows exception";
26
27 throw; // rethrow exception for further processing
28
29 } // end catch

imranihsan.com OOP 08 - Exception Handling

8
5/14/2014

+ 30
31 cout << "This also should not print\n";
32
33 } // end function throwException
34
35 int main()
36 {
37 // throw exception
38 try {
39 cout << "\nmain invokes function throwException\n";
40 throwException();
41 cout << "This should not print\n";
42
43 } // end try
44
45 // handle exception
46 catch ( exception &caughtException ) {
47 cout << "\n\nException handled in main\n";
48
49 } // end catch
50
51 cout << "Program control continues after catch in main\n";
52
53 return 0;
54
55 } // end main

imranihsan.com OOP 08 - Exception Handling

+ main invokes function throwException


Function throwException throws an exception
Exception handled in function throwException
Function throwException rethrows exception

Exception handled in main


Program control continues after catch in main

imranihsan.com OOP 08 - Exception Handling

You might also like