Ett sista exempel med hantering av exceptionella händelser, del 1

(WWVLVWDH[HPSHOPHG
KDQWHULQJDYH[FHSWLRQHOOD
KlQGHOVHUGHO
(WWVLVWDH[HPSHOPHG
KDQWHULQJDYH[FHSWLRQHOOD
KlQGHOVHUGHO
Execpt - 1
//** filen fx.h*************************************
#ifndef _fx_
#define _fx_
#include <stdlib.h>
Execpt - 2
//** filen funk.h*************************************
#ifndef _funk_
#define _funk_
#include "fx.h"
int fa(int i);
int funk(int x);
int fb(int i);
#endif
#endif
//** filen fx.cc************************************
#include "fx.h"
//** filen fx.cc************************************
#include "funk.h"
int fa(int i)
{
srand(i);
return rand()%2;
}
int fb(int i)
{
int tal = rand()%3;
int funk(int x)
{
int a = fa(x);
int b = fb(x);
return a/b;
}
if (tal == 0) throw "Division med noll! ";
if (tal == 2) throw tal;
return tal;
}
1
(WWVLVWDH[HPSHOPHG
KDQWHULQJDYH[FHSWLRQHOOD
KlQGHOVHUGHO
//** filen funk.h*************************************
#include <iostream.h>
#include "funk.h"
#include <stdexcept>
//
//
//
//
//
(WWVLVWDH[HPSHOPHG
KDQWHULQJDYH[FHSWLRQHOOD
KlQGHOVHUGHO
Execpt - 3
//** Fortsättning av filen test.cc *********************
catch(overflow_error e1)
{
cout <<e1.what() << " - overflow_error -" << endl;
}
På grund av att vi använder objekten e1 och e2 av
typerna "overflow_error" och ”exception” i två av de
nedanstående "catch-blocken” och standardbiblioteket
”stdexception” inte är inkluderad i någon annan fil
så måste det inkluderas nu.
catch(exception &e2)
{
cout << e2.what() << " - exception -" << endl;
}
using namespace std;
catch(int talet)
{
cout<<"Du har försökt att dividera med "<<talet << endl;
}
int main()
{
int i, r;
catch(char *textString)
{
cout << textString << " - textString -" << endl;
}
cout << "Tal: ";
while (cin >> i)
{
try
{
r = funk(i);
cout << "Resultatet blev " << r << endl;
}
catch(overflow_error e1)
{
cout << e1.what() << " -- overflow_error --" <<
endl;
}
Execpt - 4
}
catch(...)
{
Exempel på utskrift
cout << " - ... -" << endl; Tal: 1
Resultatet blev 0
}
Tal: 2
Du har försökt att dividera med 2
cout << "Tal: ";
Tal: 3
} //Avslutar av while-blocket Division med noll! - textString Tal: 4
Resultatet blev 1
return 0;
Tal: q
i
2