Diferencia entre revisiones de «Programación en C++/Excepciones»

Contenido eliminado Contenido añadido
El lobo (discusión | contribs.)
El lobo (discusión | contribs.)
Línea 78:
 
== La clase exception ==
Tal como se mostró en el programa anterior, los errorres generados por las librerías estándar de C++ pueden ser capturados por un catch que tome un parámetro tipo <b>exception</b>. Realmente, exception es una clase base de donde usted puede derivar las suyas y sobrescribir los métodos para el tratamiento de excepciones. La clase exception está incluida en la libreria <b>&lt;exception&gt;</b> y su estructura es la siguiente:
<p class="parrafo">Tal como se mostró en el programa anterior los errorres generados por las librerías
 
estándar de C++ pueden ser capturados por un catch que tome un parámetro tipo <b>exception</b>. Realmente,
exception es una clase base de donde usted puede derivar las suyas y sobrescribir los m&eacute;todos para el
tratamiento de excepciones. La clase exception está incluida en la libreria <b>&lt;exception&gt;</b> y su
estructura es la siguiente:</p>
<pre>class exception {
public:
exception() throw() { }
virtual ~exception() throw();
virtual const char* what() const throw();
};</pre>
<p>En muchos casos bastará con sobrescribir el método <b>what()</b> en la clase derivada de
exception, ya que dicho método es el encargado de generar el mensaje que trata de explicar la naturaleza
del error ocurrido. En el programa que veremos en seguida, se da un ejemplo sencillo de cómo crear una
clase derivada de la clase exception con el objetivo de sobrescribir el método what().</p>
<div class="code">// Demostración: try, throw y catch
<pre>
 
En muchos casos bastará con sobrescribir el método <b>what()</b> en la clase derivada de exception, ya que dicho método es el encargado de generar el mensaje que trata de explicar la naturaleza del error ocurrido. En el programa que veremos en seguida, se da un ejemplo sencillo de cómo crear una clase derivada de la clase exception con el objetivo de sobrescribir el método what().
#include &lt;iostream&gt;<br>#include &lt;cstdlib&gt;<br>#include &lt;exception&gt;<br>using namespace std;<br>
<source lang=cpp>
// Demostración: sobrescritura del método what()
#include <iostream>
#include <cstdlib>
#include <exception>
 
using namespace std;
 
class div_cero : public exception
{
public:
const char* what() const throw()
{
{
return "Error: división por cero...";
}
}
};
 
int main(int argc, char *argv[])
{
double N, D;
cout &lt;&lt;<< "Probando división" &lt;&lt;<< endl;
cout &lt;&lt;<< "Ingrese el numerador :";
cin &gt;&gt;>> N;
cin.clear();
 
cout &lt;&lt;<< "Ingrese el denominador :";
cin >> D;
cin.clear();
 
try {
cout &lt;&lt; "Ingrese el denominador :";
if (D == 0) throw div_cero();
cin &gt;&gt; D;
cout << N << " / " << D << " = " << N/D << endl;
cin.clear();
}
catch(div_cero& e) {
cout &lt;&lt;<< e.what() &lt;&lt;<< endl;
}
 
system("PAUSE");
try {
return 0;
if (D == 0) throw div_cero();
}</source>
cout &lt;&lt; N &lt;&lt; " / " &lt;&lt; D &lt;&lt; " = " &lt;&lt; N/D &lt;&lt; endl;
}
catch(div_cero& e) {
cout &lt;&lt; e.what() &lt;&lt; endl;
}
 
system("PAUSE");
return 0;
}</pre></div><p></p>
<p class="parrafo">Siguiendo la misma metodología mostrada por el programa anterior, usted puede crear
clases independientes para capturar errores de excepciones específicas. Por ejemplo, si se desea crear una serie