C++ nos proporciona una clase de manejo de excepciones estándar , que se utiliza para generar excepciones cuando se ejecutan funciones en la biblioteca estándar de C++. La estructura jerárquica de las clases de excepción estándar proporcionadas por C++ es la siguiente:
Se puede ver que todas las clases de excepción heredan de la clase base de excepción. Logic_error y runtime_error bajo la clase de excepción son dos categorías relativamente grandes, que incluyen múltiples autoclases y se dividen en tablas para representar errores lógicos y errores de tiempo de ejecución .
Dé ejemplos, tales como:
1. Cuando usamos new para abrir memoria, si no hay suficiente espacio, se generará una excepción bad_alloc .
2. Cuando usamos Dynamic_cast() para realizar una conversión de tipo dinámico y fallamos, se generará una excepción bad_typeid .
3. Cuando el valor calculado excede el rango máximo representado por el tipo, se genera una excepción overflow_error , que indica un desbordamiento de la operación. De manera similar, underflow_error indica un desbordamiento de la operación.
4. Cuando usamos el subíndice de clase de cadena pero se sale de los límites, se genera una excepción fuera de rango .
Espera... espera... descubre más por tu cuenta.
Cabe señalar que cuando se utiliza la clase de excepción estándar que viene con C ++, debe incluir el archivo de encabezado correspondiente, porque las clases de excepción y bad_exception se definen en la excepción del archivo de encabezado, y la clase bad_alloc se define en el archivo de encabezado nuevo. y la clase bad_typeid se define en el archivo de encabezado typeinfo, la clase ios_base::failure se define en el archivo de encabezado ios y otras clases de excepción se definen en stdexcept.
A continuación, le mostraré cómo utilizar la clase de excepción estándar de C++ :
#include<iostream>#include<new>#include<stdexcept>usingnamespacestd;// Manejo de excepciones intmain(){string*s;try{s=newstring(www.dotcpp.com);cout<<s->substr( 15,5);}catch(bad_alloc&t){cout<<Se produjo una excepción:<<t.what()<<endl;}catch(out_of_range&t){cout<<Se produjo una excepción:<<t.what()<<endl;} retorno0;}
Los resultados de ejecución son los siguientes:
¡Pruébelo usted mismo y aprenda a usarlo!