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 2:
[mailto:oscarpalacios1@yahoo.com.mx Oscar E. Palacios]
 
== Control de excepciones ==
 
<div style="background:#fffeee; text-align:justify; padding:40px">
Línea 30:
}</source>
 
== Excepciones genéricas ==
Como ya hemos mencionado, los herroreserrores pueden deberse a una multitud de situaciones muchas veces inesperadas, por tal motivo, en C++ existe una forma de manejar excepciones desconocidas ( genéricas ) y es buena idea que si usted esta escribiendo un controlador de errores incluya un <b>catch</b> para capturar errores inesperados. Por ejemplo, en el siguiente progama se escribe un <b>catch</b> que tratará de capturar cualquier error inesperado. Observe que la sintaxis para declarar un catch general es:<br>
<pre>catch(...) { bloque de imstrucciones }</pre>
<source lang=cpp>
Línea 50 ⟶ 51:
}</source>
 
Si usted está usando una clase escrita por terceras personas o de las que se incluyen con el compilador y desea utilizar el mecanismo <b>try</b>, deberá conocer el tipo de excepción lanzado por dicha clase para así poder escribir el <b>catch</b> correspondiente para el tratamiento de dicho error. Por ejemplo, la función <b>at()</b> de la clase <b>string</b> ( que será estudiada más adelante ) lanza una excepción cuando se trata de leer o escribir un componente fuera de rango. En tales casos usted puede proceder a capturar el error como se muestra en el siguiente programa.<br>
<p class="parrafo">Si usted está usando una clase escrita por terceras personas o de las que se
<source lang=cpp>
incluyen con el compilador y desea utilizar el mecanismo <b>try</b>, deberá conocer el tipo de
// Compilado y probado exitosamente con Dev-C++
excepción lanzado por dicha clase para así poder escribir el <b>catch</b> correspondiente para
// Demostración: excepción de la clase string
el tratamiento de dicho error. Por ejemplo, la función <b>at()</b> de la clase <b>string</b> (que será estudiada más adelante)
 
lanza una excepción cuando se trata de leer o escribir un componente fuera de rango. En tales casos
#include <iostream>
usted puede proceder a capturar el error como se muestra en el siguiente programa.</p>
#include <string>
<div class="code">// Demostración: try, throw y catch
 
<pre>
#include &lt;iostream&gt;<br>#include &lt;string&gt;<br>using namespace std;<br>
 
int main()
{
string s = "Hola";
 
try {
cout &lt;&lt;<< s.at(100) &lt;&lt;<< endl;
}
catch(exception& e) {
cout &lt;&lt;<< e.what() &lt;&lt;<< endl;
}
 
cin.get();
return 0;
}</source>
En el programa anterior el método <b>at</> de la clase <b>string</b> lanzará ( trow-up ) un error de excepción, ya que la instrucción <b>s.at(100)</b> trata de acceder a un elemento fuera de los limites del objeto ( s ).
 
== La clase exception ==
try {
cout &lt;&lt; s.at(100) &lt;&lt; endl;
}
catch(exception& e) {
cout &lt;&lt; e.what() &lt;&lt; endl;
}
cin.get();
return 0;
}</pre></div><p></p>
<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,