c:c_exception_handling
This is an old revision of the document!
Table of Contents
C - C++ Exception Handling
#include <iostream> using namespace std; int main() { cout << "Start\n"; try { cout << "Inside try block\n"; throw 1; // throw an error cout << "This will not execute"; } catch (int i) { // catch an error cout << "Caught an exception -- value is: "; cout << i << "\n"; } cout << "End"; return 0; }
Multiple catch blocks
#include <iostream.h> int main () { try { char * mystring; mystring = new char [10]; if (mystring == NULL) throw "Allocation failure"; for (int n=0; n<=100; n++) { if (n>9) throw n; mystring[n]='a'; } } catch (int i) { cout << "index " << i << " is out of range" << endl; } catch (char * str) { cout << "Exception: " << str << endl; } return 0; }
Class exceptions
#include <iostream> #include <cstring> using namespace std; class forgetcode { public: char Error[80]; forgetcode() { cout<<"Error has occured"; } void display() { cout<<"\nPlease Enter a positve number"; } }; int main() { int i; try { cout << "Enter a positive number: "; cin>>i; if(i<0) throw forgetcode(); else cout<<"\nThe entered number is "<<i; } catch (forgetcode f) { f.display(); } return 0; }
Throwing Exception
#include <iostream> #include <stdexcept> using std::cin; using std::cout; using std::endl; using std::runtime_error; class DivideByZeroException : public runtime_error { public: DivideByZeroException::DivideByZeroException(): runtime_error( "attempted to divide by zero" ) {} }; double quotient( int numerator, int denominator ) { throw DivideByZeroException(); // terminate function return 0; } int main() { try { double result = quotient( 1, 1 ); cout << "The quotient is: " << result << endl; } catch ( DivideByZeroException ÷ByZeroException ) { cout << "Exception occurred: " << divideByZeroException.what() << endl; } return 0; }
Throw Types
#include <iostream> using namespace std; // only throw ints, chars, and doubles void f(int val) throw(int, char, double) { if(val==0) throw val; if(val==1) throw 'a'; if(val==2) throw 123.23; } int main() { try{ f(0); // also, try passing 1 and 2 to f() } catch(int i) { cout << "Caught an integer\n"; } catch(char c) { cout << "Caught char\n"; } catch(double d) { cout << "Caught double\n"; } return 0; }
c/c_exception_handling.1507803725.txt.gz · Last modified: 2020/07/15 09:30 (external edit)