/**
*
* \file CstCodErr.h
*
* \authors M. Laporte, D. Mathieu
*
* \date 10/02/2011
*
* \version V1.0
*
* \brief Codes d'erreurs
*
**/
#ifndef __CSTCODERR_H__
#define __CSTCODERR_H__
namespace nsUtil
{
enum {KNoExc = 0,
KNoError = 0,
KExcDivZero = 11, // Division par zero
KExcStd = 254,
KExcInconnue = 255
};
} // namespace nsUtil
#endif /* __CSTCODERR_H__ */
/**
*
* \file DivisionParZero.cxx
*
* \author D. Mathieu
*
* \date 07/12/2011
*
**/
#include <iostream>
#include <exception>
#include <iomanip> // setw()
#include "CstCodErr.h"
#include "CException.h"
using namespace std;
using namespace nsUtil;
namespace
{
int divisionEntiere (int num, int denom) throw (CException)
{
if (0 == denom)
throw CException ("Division par zero", KExcDivZero);
return num / denom;
} // divisionEntiere()
void divisionParZero ()
{
int lesNums [] = { 12, 3, -5, 0, 40 };
const unsigned KSzFractions =
sizeof (lesNums) / sizeof (lesNums [0]);
int lesDenoms [KSzFractions] = { 4, 0, -5, 10, 4 };
for (unsigned i = 0; i < KSzFractions; ++i)
{
cout << setw (4) << lesNums [i] << " / "
<< setw (4) << lesDenoms [i] << " = ";
try
{
cout << divisionEntiere (lesNums [i], lesDenoms [i])
<< '\n';
}
catch (const CException & e)
{
cout << "Erreur : " << e.getLibelle()
<< "; Code d'erreur = " << e.getCodErr() << '\n';
}
}
} // divisionParZero()
} // namespace
int main ()
{
try
{
divisionParZero();
return KNoExc;
}
catch (const CException & e)
{
cerr << "Erreur : " << e.getLibelle() << '\n'
<< "Code d'erreur = " << e.getCodErr() << '\n';
return e.getCodErr();
}
catch (const exception & e)
{
cerr << "Exception standard : " << e.what() << '\n';
return KExcStd;
}
catch (...)
{
cerr << "Exception inconnue\n";
return KExcInconnue;
}
} // main()