User Tools

Site Tools


c:c_exception_handling

This is an old revision of the document!


C - C++ Exception Handling

C++ Standard Exceptions

#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 &divideByZeroException )
  {
    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.1507803930.txt.gz · Last modified: 2020/07/15 09:30 (external edit)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki