! An exception is a condition that occurs at execution time and makes normal continuation of the program impossible.

Similar documents
Exceptions, Templates, and the STL

Chapter 16: Exceptions, Templates, and the Standard Template Library (STL)

Unit 4 Basic Collections

I BCS-031 BACHELOR OF COMPUTER APPLICATIONS (BCA) (Revised) Term-End Examination. June, 2015 BCS-031 : PROGRAMMING IN C ++

COEN244: Class & function templates

Introduction to C++ Systems Programming

Lecture 10. To use try, throw, and catch Constructors and destructors Standard exception hierarchy new failures

Introduction to Programming Using Java (98-388)

TEMPLATES AND EXCEPTION HANDLING

IS 0020 Program Design and Software Tools

Exceptions, Case Study-Exception handling in C++.

Exception Handling Pearson Education, Inc. All rights reserved.

CSC 330 Object-Oriented Programming. Exception Handling CSC 330

Basic memory model Using functions Writing functions. Basics Prototypes Parameters Return types Functions and memory Names and namespaces

Absolute C++ Walter Savitch

! Errors can be dealt with at place error occurs

The format for declaring function templates with type parameters

COMP 2355 Introduction to Systems Programming

CS 162, Lecture 25: Exam II Review. 30 May 2018

G52CPP C++ Programming Lecture 18

Programming in C++: Assignment Week 8

C++ PROGRAMMING LANGUAGE: DYNAMIC MEMORY ALLOCATION AND EXCEPTION IN C++. CAAM 519, CHAPTER 15

6 Functions. 6.1 Focus on Software Engineering: Modular Programming TOPICS. CONCEPT: A program may be broken up into manageable functions.

When we program, we have to deal with errors. Our most basic aim is correctness, but we must

Exception Handling in C++

Programming in C++: Assignment Week 8

Tutorial 13 Salary Survey Application: Introducing One- Dimensional Arrays

CPSC 427a: Object-Oriented Programming

7 TEMPLATES AND STL. 7.1 Function Templates

Short Notes of CS201

Introduction. Common examples of exceptions

Chapter 15 - C++ As A "Better C"

FORM 2 (Please put your name and form # on the scantron!!!!)

Unit 1: Preliminaries Part 4: Introduction to the Standard Template Library

CE221 Programming in C++ Part 1 Introduction

CHAPTER 3 Expressions, Functions, Output

Introduction to Programming (Java) 4/12

CS201 - Introduction to Programming Glossary By

CS 115 Final Exam, Spring 2009

G52CPP C++ Programming Lecture 18. Dr Jason Atkin

CS201 Some Important Definitions

21. Exceptions. Advanced Concepts: // exceptions #include <iostream> using namespace std;

Vectors. CIS 15 : Spring 2007

C++ TEMPLATES. Templates are the foundation of generic programming, which involves writing code in a way that is independent of any particular type.

calling a function - function-name(argument list); y = square ( z ); include parentheses even if parameter list is empty!

Introduction to Computers and C++ Programming p. 1 Computer Systems p. 2 Hardware p. 2 Software p. 7 High-Level Languages p. 8 Compilers p.

CS102 C++ Exception Handling & Namespaces

Exception Handling Pearson Education, Inc. All rights reserved.

Problem Solving with C++

TABLE OF CONTENTS...2 INTRODUCTION...3

Introduction to C++ Professor Hugh C. Lauer CS-2303, System Programming Concepts

by Pearson Education, Inc. All Rights Reserved. 2

CHAPTER 4 FUNCTIONS. 4.1 Introduction

COM S 213 PRELIM EXAMINATION #2 April 26, 2001

CS11 Advanced C++ Fall Lecture 1

THE STANDARD TEMPLATE LIBRARY (STL) Week 6 BITE 1513 Computer Game Programming

Interview Questions of C++

Welcome Back. CSCI 262 Data Structures. Hello, Let s Review. Hello, Let s Review. How to Review 8/19/ Review. Here s a simple C++ program:

JAYARAM COLLEGE OF ENGINEERING AND TECHNOLOGY Pagalavadi, Tiruchirappalli (An approved by AICTE and Affiliated to Anna University)

Function Templates. Consider the following function:

CS201 Latest Solved MCQs

Exam 3 Chapters 7 & 9

Jayaram college of Engineering and Technology, Pagalavadi. CS2203 Object Oriented Programming Question Bank Prepared By: S.Gopalakrishnan, Lecturer/IT

Arrays. Week 4. Assylbek Jumagaliyev

Chapter 2. Procedural Programming

Introduction to C++ Introduction to C++ 1

Welcome Back. CSCI 262 Data Structures. Hello, Let s Review. Hello, Let s Review. How to Review 1/9/ Review. Here s a simple C++ program:

Standard Template Library. Containers, Iterators, Algorithms. Sequence Containers. Containers

Functions and Recursion

CS11 Introduction to C++ Fall Lecture 6

Templates and Vectors

(5-1) Object-Oriented Programming (OOP) and C++ Instructor - Andrew S. O Fallon CptS 122 (February 4, 2019) Washington State University

Data Structure. Recitation IV

Quiz Start Time: 09:34 PM Time Left 82 sec(s)

UNIT- 3 Introduction to C++

Today. andyoucanalsoconsultchapters6amd7inthetextbook. cis15-fall2007-parsons-lectvii.1 2

Dynamic Data Structures

AP COMPUTER SCIENCE JAVA CONCEPTS IV: RESERVED WORDS

The following is an excerpt from Scott Meyers new book, Effective C++, Third Edition: 55 Specific Ways to Improve Your Programs and Designs.

G52CPP C++ Programming Lecture 15

EECS402 Lecture 02. Functions. Function Prototype

Fast Introduction to Object Oriented Programming and C++

Non-numeric types, boolean types, arithmetic. operators. Comp Sci 1570 Introduction to C++ Non-numeric types. const. Reserved words.

3.Constructors and Destructors. Develop cpp program to implement constructor and destructor.

Exceptions. Why Exception Handling?

AN OVERVIEW OF C++ 1

For example, let s say we define an array of char of size six:

Functions in C++ Problem-Solving Procedure With Modular Design C ++ Function Definition: a single

Chapter 5 Errors. Hyunyoung Lee. Based on slides by Bjarne Stroustrup.

Lecture 10. Command line arguments Character handling library void* String manipulation (copying, searching, etc.)

GE U111 Engineering Problem Solving & Computation Lecture 6 February 2, 2004

To declare an array in C, a programmer specifies the type of the elements and the number of elements required by an array as follows

The Standard Template Library. An introduction

CE221 Programming in C++ Part 2 References and Pointers, Arrays and Strings

Introduction to Programming using C++

TEMPLATE IN C++ Function Templates

Module 1. C++ Classes Exercises

Chapter 5 Errors. Bjarne Stroustrup

CS197c: Programming in C++

Object-Oriented Programming (OOP) Fundamental Principles of OOP

Transcription:

Exceptions! Exceptions are used to signal error or unexpected events that occur while a program is running.! An exception is a condition that occurs at execution time and makes normal continuation of the program impossible.! When an exception occurs, the program must either terminate or jump to special code for handling the exception.! The special code for handling the exception is called an exception handler.! Example: unreliable division function: double divide(double numerator, double denominator) if (denominator == 0) cout << Error: Can not divide by zero! << endl; return 0; //this is a problematic error signal else return (numerator/denominator);! Note: 0 is problematic as an error signal since 0 is a valid result of a division operation.! Exceptions - Key Words: - throw followed by an argument, is used to signal an exception - try followed by a block, is used to invoke code that throws an exception. - catch followed by a block, is used to process exceptions thrown in the preceding try block. catch takes a parameter that matches the type thrown. 16-1

! Sample Program: // This program illustrates exception handling. // Function prototype double divide(double, double); int main() int num1, num2; double quotient; cout << "Enter two numbers: "; cin >> num1 >> num2; try quotient = divide(num1, num2); cout << "The quotient is " << quotient << endl; catch (char *exceptionstring) cout << exceptionstring; cout << "End of the program.\n"; return 0; double divide(double numerator, double denominator) static char *str = "ERROR: Cannot divide by zero.\n"; if (denominator == 0) throw str; else return (numerator/denominator); 16-2

Object Oriented Exception Handling with Classes Throwing an Exception Class! Instead of throwing a character string or some other value of a primitive type, the following program throws an exception class.! The throw statement causes an instance of the exception class to be created. All that remains is for the catch block to handle the exception.! Class Definition File: class IntRange private: int input; // For user input int lower; // Lower limit of range int upper; // Upper limit of range public: // Exception class class OutOfRange ; // Empty class declaration // Member functions IntRange(int low, int high) lower = low; upper = high; // Constructor int getinput() cin >> input; if (input < lower input > upper) throw OutOfRange(); //throw an exception class return input; ; #endif 16-3

! Sample Program that Throws an Exception Class: // This program demonstrates the use of object-oriented // exception handling. #include "IntRange.h" int main() IntRange range(5, 10); int uservalue; cout << "Enter a value in the range 5-10: "; try uservalue = range.getinput(); cout << "You entered " << uservalue << endl; catch (IntRange::OutOfRange) cout << "That value is out of range.\n"; cout << "End of the program.\n"; return 0; 16-4

Multiple Exceptions! In many cases a program will need to test for several different types of errors and signal which one has occurred.! C++ allows you to throw and catch multiple exceptions. The only requirement is that each different exception be of a different type. #ifndef INTRANGE2_H #define INTRANGE2_H class IntRange2 private: int input; int lower; int upper; public: // Exception classes. class TooLow ; class TooHigh ; // Member functions. IntRange2(int low, int high) lower = low; upper = high; int getinput() cin >> input; if (input < lower) throw TooLow(); else if (input > upper) throw TooHigh(); return input; ; #endif // For user input // Lower limit of range // Upper limit of range // Constructor 16-5

! Sample Program that Throws Multiple Exceptions: // This program demonstrates the IntRange2 class. #include "IntRange2.h" int main() IntRange2 range(5, 10); int uservalue; cout << "Enter a value in the range 5-10: "; try uservalue = range.getinput(); cout << "You entered " << uservalue << endl; catch (IntRange2::TooLow) cout << "That value is too low.\n"; catch (IntRange2::TooHigh) cout << "That value is too high.\n"; cout << "End of the program.\n"; return 0; 16-6

Extracting Information from the Exception Class! Sometimes we may want an exception to pass information back to the exception handler. This can be accomplished by giving the exception class member variables in which the information can be stored. #ifndef INTRANGE3_H #define INTRANGE3_H class IntRange3 private: int input; int lower; int upper; public: // Exception class. class OutOfRange public: int value; OutOfRange(int i) value = i; ; // Member functions. IntRange3(int low, int high) // For user input // Lower limit of range // Upper limit of range // Exception class constructor // Constructor lower = low; upper = high; int getinput() cin >> input; if (input < lower input > upper) throw OutOfRange(input); //pass info to the handler return input; ; #endif 16-7

! Sample Program that Passes Info to the Exception Handler: // This program demonstrates the IntRange3 class. #include "IntRange3.h" int main() IntRange3 range(5, 10); int uservalue; cout << "Enter a value in the range 5-10: "; try uservalue = range.getinput(); cout << "You entered " << uservalue << endl; catch (IntRange3::OutOfRange ex) cout << "That value " << ex.value << " is out of range.\n"; cout << "End of the program.\n"; return 0; 16-8

Unwinding the Stack! If an exception is thrown in a try block that has a catch block capable of handling the exception, control transfers from the throw point to the catch block. Assuming the catch block runs to completion, execution will continue at the first statement after the sequence of catch blocks attached to the try.! If the function does not contain a catch block capable of handling the exception, control passes out of the function, and the exception is automatically re-thrown at the point of the call in the calling function. (See an example of a nested try block on the next page.)! By this process, an exception can propagate backwards along the chain of function calls until the exception is thrown out of a try block that has a catch block than can handle it.! If no such try block is ever found, the exception will eventually be thrown out of the main function, causing the program to be terminated.! This process of propagating un-caught exceptions from a function to its caller is called unwinding the stack of function calls. 16-9

Re-throwing an Exception! Example of Nested try blocks: // This program demonstrates a nested try block. int main() try dosomething(); catch (exception1) code to handle exception1 catch (exception2) code to handle exception2 return 0; void dosomething() try code that can throw exceptions 1, 2 and 3 exception2 will be handled by main() catch (exception1) throw; //re-throw exception1 catch (exception3) code to handle exception3 16-10

Function Templates! A function template is a generic function that can work with different data types.! The programmer writes the specifications of the functions, but substitues parameters for data types.! When the compiler encounters a call to the function, it generates code to handle the specific data type(s).! Function templates are better than overloaded functions, since the code defining the algorithm of the function is only written once.! Sample code: int square(int number) return (number * number); double square(double number) return (number * number);! Function Template: template <class T> //template prefix T square(t number) //T is a generic data type return (number * number);! A template prefix begins with the keyword template, followed by angle brackets containing one or more generic data types (separated bo commas) used in the template. After this, the function definition is written as usual except the generic type parameters are used instead of the actual data type names. 16-11

! Sample Program: // This program uses a function template. #include <iomanip> // Template definition for square function. template <class T> T square(t number) return (number * number); int main() cout << setprecision(5); // Get an integer and compute its square. cout << "Enter an integer: "; int ivalue; cin >> ivalue; // The compiler creates int square(int) at the first // occurrence of a call to square with an int argument. cout << "The square is " << square(ivalue) << endl; // Get a double and compute its square. cout << "\nenter a double: "; double dvalue; cin >> dvalue; // The compiler creates double square(double)at the first // occurrence of a call to square with a double argument. cout << "The square is " << square(dvalue) << endl; return 0; 16-12

The swap Function Template! A generic library swap function template exists and can be invoked by using #include <algorithm>.! Sample Program: #include <string> #include <algorithm> //needed for swap int main() // Get and swap two chars. char firstchar, secondchar; cout << "Enter two characters: "; cin >> firstchar >> secondchar; swap(firstchar, secondchar); cout << firstchar << " " << secondchar << endl; // Get and swap two ints. int firstint, secondint; cout << "Enter two integers: "; cin >> firstint >> secondint; swap(firstint, secondint); cout << firstint << " " << secondint << endl; // Get and swap two strings. string firststring, secondstring; cout << "Enter two strings: "; cin >> firststring >> secondstring; swap(firststring, secondstring); cout << firststring << " " << secondstring << endl; return 0; 16-13

Using Operators in Function Templates! Always remember that templates will only work with types that support the operations used by the template.! Sample Program: // This program illustrates the use of function templates. #include <string> // Template for minimum of an array. template <class T> T minimum(t arr[ ], int size) T smallest = arr[0]; for (int k = 1; k < size; k++) if (arr[k] < smallest) smallest = arr[k]; return smallest; int main() // The compiler creates int minimum(int [], int) // when you pass an array of int. int arr1[] = 40, 20, 35; cout << "The minimum number is " << minimum(arr1,3) << endl; // The compiler creates string minimum(string [], int) // when you pass an array of string. string arr2[] = "Zoe", "Snoopy", "Bob", "Waldorf"; cout << "The minimum string is " << minimum(arr2, 4) << endl; return 0; 16-14

Function Templates with Multiple Types! Sample Program: // This program illustrates the use of function templates // with multiple types. #include <string> //template function template <class T1, class T2, class T3> void echoandreverse(t1 a1, T2 a2, T3 a3) cout << "Original order is: " << a1 << " " << a2 << " " << a3 << endl; cout << "Reversed order is: " << a3 << " " << a2 << " " << a1 << endl; int main() echoandreverse("computer", 'A', 18); echoandreverse("one", 4, "All"); return 0; 16-15

Overloading Function Templates! Function templates can be overloaded.! Sample Program: // This program demonstrates an overloaded function template. template <class T> T sum(t val1, T val2) return val1 + val2; template <class T> T sum(t val1, T val2, T val3) return val1 + val2 + val3; int main() double num1, num2, num3; cout << "Enter two values: "; cin >> num1 >> num2; cout << "Their sum is " << sum(num1, num2) << endl; cout << "Enter three values: "; cin >> num1 >> num2 >> num3; cout << "Their sum is " << sum(num1, num2, num3) <<endl; return 0; 16-16

Notes on Function Templates! A function template is a pattern (or prototype).! No actual code is generated by the compiler until the function named in the template is called in the code.! A function template uses no memory.! When passing a class object to a function template, ensure that all operators referred to in the template are defined or overloaded in the class definition.! All data types specified in a template prefix must be used in the template definition.! Function calls must pass parameters for all data types specified in the template prefix.! Function templates can be overloaded need different parameter lists.! Like regular functions, function templates must be defined before being called.! Templates are often appropriate for multiple functions that perform the same task with different parameter data types! Develop function using usual data types first, then convert to a template: - add template prefix, - convert data type names in the function to a type parameter (i.e., a T type) in the template. 16-17

Class Templates! Templates can be used to create generic classes and abstract data types.! Unlike functions, a class template is instantiated by supplying the type name (int, float, string, etc.) at object definition.! Sample Class Template: template <class T> class Joiner public: T combine(t x, T y) return (x+y); ;! Example: Using Class Template: Joiner<double> jd; //instantiates an object of type double Joiner<string> sd; //instantiates an object of type string cout << jd.combine(3.0, 5.0); //prints: 8.0 cout << sd.combine("hi ", "Ho"); //prints: Hi Ho 16-18

Class Templates and Inheritance! Templates can be combined with inheritance.! You can derive: - Non template classes from a template class: instantiate the base class template and then inherit from it. - A template class from a template class - Other combinations possible 16-19

The Standard Template Library (STL)! The Standard Template Library (STL) is a library containing templates for frequently used data structures and algorithms.! The most important data structires included are containers and iterators.! A container is a class that stores data and organizes it in some fashion.! An iterator is an object that works like a pointer and allows access to items stored in containers.! Sequence Containers: Organize and access data sequentially, as in an array: - vector A sequence of items implemented as an array. Items can be efficiently added and removed from the vector at its end. - deque A sequence of items that has a front and a back. Items can be efficiently added and removed from the ends. - list A sequence of item that allows quick additions and removals from any position.! Associative Containers: Use keys to allow data elements to be quickly accessed: - set Stores a set of keys. No duplicate values allowed. - multiset Stores a set of keys. Duplicate values allowed. - map Maps a set of keys to data elements. Each key is associated with a unique data element. No duplicates. - multimap Maps a set of keys to data elements. The same key may be associated with multiple values. 16-20

! Iterators: Iterators are a generalization of pointers used to access information in containers! Iterator Types: - forward can only move forward in a container (uses ++ operator) - bidirectional can only move forward or backward in a container (uses ++ and -- operators) - random-access can move forward and backward, and can jump to a specific data element in a container. - input can be used with cin to read information from an input device or a file. - output can be used with cout to write information to an output device or a file. // This program is a simple demonstration of the vector STL template. #include <vector> // needed for vectors (see text for details) int main() vector<int> vect; // Create a vector of int for (int x = 0; x < 10; x++) vect.push_back(x*x); //print everything using iterators. vector<int>::iterator iter = vect.begin(); while (iter!= vect.end()) cout << *iter << " "; iter ++; return 0; 16-21

STL Algorithms! STL contains algorithms implemented as function templates to perform operations on containers.! Requires algorithm header file (#include <algorithm>)! Collection of algorithms includes (see text for details): - boolvar = binary_search(iter1, iter2, value) Performs a binary search for an object (value) in a container in a range of elements iter1 to iter2. Returns true if found; otherwise returns fasle. - number = count(iter1, iter2, value) Returns the number of times a value appears in a container in the range of elements iter1 to iter2. - for_each(iter1, iter2, func) Executes a specified function (func) for each element in a container in the range of elements iter1 to iter2. - iter3= find(iter1, iter2, value) Finds the first object in a container that matches a value. If value is found, the function eturns an iterator to it; otherwise, it returns the iterator iter2. - iter3 = max_element(iter1, iter2) Finds max element in the portion of a container delimited by the range of elements iter1 to iter2. Returns an iterator. - iter3 = min_element(iter1, iter2) Finds min element in the portion of a container delimited by the range of elements iter1 to iter2. Returns an iterator. - random_shuffle(iter1, iter2) Randomly reorders the portion of the container in the given range of elements iter1 to iter2. Returns an iterator - sort(iter1, iter2) Sorts into ascending order the portion of the container specified by the given range of elements iter1 to iter2. 16-22