SlideShare une entreprise Scribd logo
1  sur  12
Télécharger pour lire hors ligne
UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO CENTRO
UNIVERSITARIO UAEM ATLACOMULCO
AUTÓMATAS Y LENGUAJES FORMALES
ALUMNA:
ALETVIA JACQUELINE LEÓN VENEGAS
TEMAS:
 MANEJO DE EXCEPCIONES
 LA CLASE STRING Y EL PROCESAMIENTO DE FLUJO DE CADENA
ING. HECTOR CABALLERO HERNANDEZ
INGENIERÍA EN COMPUTACIÓN
ICO-19
ATLACOMULCO, MÉX. A 20 DE ABRIL DE 2015.
ÍNDICE
 MANEJO DE EXCEPCIONES……………………………………………………… 1
 LA CLASE STRING Y EL PROCESAMIENTO DE FLUJO DE CADENA......... 6
 BIBLIOGRAFÍA…………………………………………………………………….. 10
MANEJO DE EXCEPCIONES
El manejo de excepciones permite al programador remover el código para manejo de errores
de la “línea principal” de ejecución del programa, lo cual mejora la claridad y capacidad de
modificación del mismo. Los programadores pueden optar por manejar cualquier excepción que
deseen; esta flexibilidad reduce la probabilidad de que los errores se pasen por alto y, por
consecuencia, hace que los programas sean más robustos.
La clase runtime_error, una clase derivada de la clase exception, es la base estándar de C++
para representar errores en tiempo de ejecución. La clase exception es la clase base estándar de C++
para todas las excepciones. Una clase de excepción típica que se deriva de la clase runtime_error
define solo un constructor que pasa una cadena de mensaje de error al constructor de la clase base
runtime_error. Cada clase de excepción que se deriva de forma directa o indirecta de exception
contiene la función virtual what, la cual devuelve el mensaje de error de un objeto excepción.
ENCERRAR CÓDIGO EN UN BLOQUE TRY
El manejo de excepciones está orientado a situaciones en las que la función que detecta un
error no puede manejarlo.
C++ proporciona bloques try para permitir el manejo de excepciones. Un bloque try consiste
en la palabra clave try, seguida de llaves ({}) que definen un bloque de código en el que podrían
ocurrir errores. El bloque try encierra instrucciones que podrían ocasionar excepciones, e
instrucciones que se deberían omitir si ocurre una excepción. Las excepciones pueden surgir a
través de código mencionado de forma explícita en un bloque try, a través de las llamadas a otras
funciones y a través de llamadas a funciones con muchos niveles de anidamiento, iniciadas por el
código en un bloque try.
DEFINICIÓN DE UN MANEJADOR CATCH
Las excepciones se procesan mediante los manejadores catch que atrapan y manejan las
excepciones. Cada manejador catch empieza con la palabra clave catch y especifica entre paréntesis
un parámetro de excepción que representa el tipo de excepción que puede procesar el manejador
catch. Cuando ocurre una excepción en un bloque try, el manejador catch que se ejecuta es aquél
cuyo tipo coincide con el tipo de la excepción que ocurrió. Si un parámetro de excepción incluye un
nombre de parámetro opcional, el manejador catch puede usar ese nombre de parámetro para
1
interactuar con la excepción atrapada en el cuerpo del manejador catch, que está delimitado por
llaves ({y}). Por lo general, un manejador catch reporta el error al usuario, lo registra en un archivo,
termina el programa sin que haya pérdida de datos o intenta una estrategia alterna para realizar la
tarea fallida.
MODELO DE TERMINACIÓN DEL MANEJO DE EXCEPCIONES
Si ocurre una excepción como resultado de una instrucción en un bloque try, este bloque
expira. A continuación, el programa busca el primer manejador catch que pueda procesar el tipo de
excepción que ocurrió. El programa localiza el catch que coincida, comparando el tipo de excepción
lanzada con el tipo del parámetro de excepción de cada catch, hasta que el programa encuentra una
coincidencia. Cuando ocurre una coincidencia, se ejecuta el código contenido en el manejador catch
que coincide. Cuando un manejador catch termina su procesamiento al llegar a su llave derecha de
cierre (}), se considera que la excepción se manejó y las variables locales definidas dentro del
manejador catch queda fuera de alcance. El control del programa no regresa al punto en el que
ocurrió la excepción debido a que el bloque try ha expirado. El control continúa con la primera
instrucción después del último manejador catch que sigue del bloque try. A eso se le conoce como
modelo de terminación del manejo de excepciones.
Si el bloque try completa su ejecución con éxito, entonces el programa ignora los manejadores
catch y el control del programa continua con la primera instrucción después del último bloque catch
que sigue de ese bloque try.
Si una excepción que ocurre en un bloque try no tiene un manejador catch que coincida, o si
una excepción ocurre en una instrucción que no se encuentre dentro de un bloque try, la función que
contiene la instrucción termina de inmediato y el programa intenta localizar un bloque try
circundante en la función que hizo la llamada. A este proceso se le conoce como limpieza de la
pila.
Para lanzar una excepción, se utiliza la palabra clave throw seguida de un operador que
representa el tipo de excepción a lanzar. Por lo general, una instrucción throw especifica un
operando, esté operando puede ser de cualquier tipo. Si el operando es un objeto, lo llamamos
objeto excepción. Sin embargo, un operador de throw también puede asumir otros valores, como el
valor de una expresión que no produce un objeto o el valor de un int. El operando throw se utiliza
para inicializar el parámetro en el manejador catch. Esta es una característica central del manejo de
2
excepciones: una función debe lanzar una excepción antes de que el error tenga la oportunidad de
manifestarse.
CUANDO UTILIZAR EL MANEJO DE EXCEPCIONES
El manejo de excepciones está diseñado para procesar errores síncronos, que ocurren cuando
se ejecuta una instrucción. El manejo de excepciones no está diseñado para procesar los errores
asociados con los eventos síncronos los cuales ocurren en paralelo con, y de manera independiente
a, el flujo de control del programa. El mecanismo de manejo de errores también es útil para
procesar problemas que ocurren cuando un programa interactúa con los elementos de software, con
las funciones miembro, los constructores, los destructores y las clases. En vez de manejar los
problemas de manera interna, dichos elementos de software utilizan comúnmente las excepciones
para notificar a los programas cuando ocurren problemas.
VOLVER A LANZAR UNA EXCEPCIÓN
Es posible que un manejador de excepciones, al momento de recibir una excepción, decida que
no puede procesar esa excepción o que puede procesar la excepción solo de manera parcial. En
tales casos, el manejador de excepciones puede diferir el manejo de excepciones a otro manejador
de excepciones. En cualquier caso, para lograr esto hay que volver a lanzar la excepción mediante
la siguiente instrucción: throw;
ESPECIFICACIONES DE EXCEPCIONES
Una especificación de excepciones opcional encuentra una lista de excepciones que puede
lanzar una función. Una función solo puede lanzar excepciones de los tipos indicados por la
especificación, o excepciones de cualquier tipo derivado de estos tipos. Si la función lanza una
excepción que no pertenezca a un tipo especificado, el mecanismo de manejo de excepciones llama
a la función unexpected, la cual termina el programa. Una función que no proporciona una
especificación de excepciones puede lanzar cualquier excepción. Al colocar throw() después de la
lista de parámetros de una función, se establece que esta función no lanza excepciones. Si la función
intenta lanzar una excepción, se invoca la función unexpected.
3
PROCESAMIENTO DE EXCEPCIONES INESPERADAS
La función unexpected llama a la función registrada con la función set_unexpected. Si no se ha
registrado una función de esta forma, se hace una llamada a la función terminate de manera
predeterminada. Los casos en los que se hace una llamada a la función terminate son:
1. El mecanismo de excepción no puede encontrar un catch que coincida para una excepción
que se haya lanzado.
2. Un destructor intenta lanzar una excepción durante la limpieza de la pila.
3. Hay un intento de volver a lanzar una excepción cuando no se esté manejando una
excepción en un momento dado.
4. Una llamada a la función unexpected realiza una llamada a la función terminate de manera
predeterminada.
La función set_terminate puede especificar la función a invocar cuando se haga la llamada a
terminate. En caso contrario, terminate llama a abort, con lo cual se termina el programa sin llamar
a los destructores de cualquier objeto restante de una clase de almacenamiento estático o
automático. Esto podría conllevar a fugas de recursos cuando un programa termina en forma
prematura. Las funciones set_terminate y set_unexpected devuelven un apuntador a la última
función llamada por terminate y unexpected, respectivamente. Las funciones set_terminate y
set_unexpected reciben como argumentos apuntadores a funciones con tipos de valores de retorno
void y sin argumentos.
LIMPIEZA DE LA PILA
Cuando se lanza una excepción pero no se atrapa en un alcance en específico, la pila de
llamadas a funciones se “limpia” y se hace un intento de atrapar (catch) la excepción en el siguiente
bloque try. Limpiar la pila de llamadas a funciones significa que la función en la que no se atrapó la
excepción termina, todas las variables locales en la función se destruyen y el control regresa a la
instrucción que invocó originalmente a esa función.
CONSTRUCTORES, DESTRUCTORES Y MANEJO DE EXCEPCIONES
Las excepciones lanzadas por un constructor hacen que se llame a los destructores de todos los
objetos creados como parte del objeto que se está construyendo, antes de que se lance la excepción.
Cada objeto automático construido en un bloque try se destruye antes de lanzar una excepción. La
4
limpieza de la pila se completa antes de que un manejador de excepciones empiece a ejecutarse. Si
un destructor invocado como resultado de la limpieza de la pila lanza una excepción, se hace una
llamada a terminate. Si un objeto tiene objetos miembros, y si se lanza una excepción antes de que
el objeto exterior este completamente construido, entonces se ejecutaran los destructores de los
objetos miembro que se hayan construido antes de que ocurra la excepción. Si se han construido
parcialmente un arreglo de objetos cuando ocurre una excepción, solo se llamara a los destructores
para los objetos elementos del arreglo que estén construidos. Cuando se lanza una excepción desde
el constructor para un objeto que se crea en una excepción new, se libera la memoria asignada en
forma dinámica para ese objeto.
PROCESAMIENTO DE LAS FALLAS DE NEW
El estándar de C++ especifica que, cuando falla el operador new, lanza una excepción
bad_alloc.
MANEJO DE LAS FALLAS DE NEW MEDIANTE LA FUNCIÓN SET_NEW_HANDLER
Una característica adicional para manejar las fallas de new es la función set_new_handler. Esta
función recibe como argumento un apuntador a una función que no recibe argumentos y devuelve
void. Una vez que set_new_handler registra un manejador de new en el programa, el operador new
no lanza bad_alloc en el futuro. El estándar de C++ especifica que la función manejadora de new
debe realizar una de las siguientes tareas:
1. Hacer mas memoria disponible al eliminar otra parte de la memoria asignada en forma
dinámica y regresar al operador new para tratar de asignar memoria otra vez.
2. Lanzar una excepción de tipo bad_alloc.
3. Llamar a la función abort o exit para terminar el programa.
LA CLASE AUTO_PTR Y LA ASIGNACIÓN DINÁMICA DE MEMORIA
Un objeto de la clase auto_ptr mantiene un apuntador a la memoria que se asigna en forma
dinámica. Cuando se hace una llamada al destructor de un objeto auto_ptr, realiza una operación
delete con su miembro de datos apuntador. La plantilla de clase auto_ptr proporciona los
operadores sobrecargados * y ->, de manera que un objeto auto_ptr se puede utilizar de la misma
forma que una variable apuntador común.
5
JERARQUÍA DE EXCEPXIONES DE LA BIBLIOTECA ESTÁNDAR
La Biblioteca estándar de C++ incluye una jerarquía de clases de excepciones. Esta jerarquía
está encabezada por la clase base exception. Algunas derivadas y sus funciones son las siguientes:
 logic_error: es la clase base de varias clases de excepciones estándar que indican errores en la
lógica del programa.
 invalid_argument: indica que se pasó un argumento inválido a una función.
 length_error: indica que para ese objeto se objeto se utilizo una longitud mayor que el tamaño
máximo permitido para el objeto que se está manipulando.
 out_of_range: indica que un valor, como un subíndice en un arreglo, excedió su rango
permitido de valores.
 runtime_error: indica errores en tiempo de ejecución.
 overflow_error: describe un error de desbordamiento aritmético.
 underflow_error: describe un error de subdesbordamiento.
LA CLASE STRING Y EL PROCESAMIENTO DE FLUJOS DE CADENA
La plantilla de clase basic_string proporciona operaciones comunes de manipulación de
cadenas, como copiar, realizar búsquedas, etc. La definición de la plantilla y todas las herramientas
de soporte se definen en el espacio de nombres, éstas incluyen la instrucción typedef, ésta se
proporciona para el tipo wchar_t. el tipo wchar_t almacena caracteres para soportar otros conjuntos
de caracteres.
La longitud de un objeto string se puede obtener mediante la función miembro length y
mediante la función miembro size. El operador subíndice ([]), se puede utilizar con objetos string
para acceder a los caracteres individuales y modificarlos.
ASIGNACIÓN Y CONCATENACIÓN DE OBJETOS STRING
La clase string proporciona el operador operator = sobrecargado y la función miembro assign
para asignaciones de de objetos string. El operador subíndice ([]) proporciona acceso de
lectura/escritura para cualquier elemento de un objeto string. La función miembro at de string
proporciona acceso comprobado; al ir mas allá de cualquiera de los extremos del objeto string se
lanza una excepción out_of_range. El operador subíndice ([]) no proporciona acceso comprobado.
La clase string proporciona los operadores + y += sobrecargados, y la función miembro append
para realizar la concatenación de objetos string.
6
COMPARACION DE OBJETOS STRING
La clase string proporciona los operadores sobrecargados ==, ¡=, <, >, <´= y >= para las
comparaciones de objetos string. La función miembro compare de string compara dos objetos
string y devuelve 0 si los objetos string son iguales, un número positivo si el primer objeto string es
lexicográficamente mayor que el segundo, o un número negativo si el primer objeto string es
lexicográficamente menor que el segundo.
SUBCADENAS
La clase string proporciona la función miembro substr para obtener una subcadena de un
objeto string. El resultado es un nuevo objeto string que se copia del objeto string de origen.
INTERCAMBIO DE OBJETOS STRING
La clase string proporciona la función miembro swap para intercambiar objetos string. La
función miembro swap de string es útil para implementar programas que ordenan cadenas.
CARACTERÍSTICAS DE LOS OBJETOS STRING
La clase string proporciona funciones miembro para recopilar información acerca del tamaño
de un objeto string, su longitud, capacidad, longitud máxima y otras características. El tamaño o la
longitud de un objeto string es el número de caracteres actualmente almacenados en el objeto string.
La capacidad de un objeto string es el número de caracteres que se pueden almacenar en el objeto
string sin necesidad de asignar más memoria. La capacidad de un objeto string debe ser cuando
menos igual a su tamaño actual, aunque puede ser mayor. La capacidad exacta de un objeto string
depende de la implementación. El tamaño máximo es el mayor tamaño posible que puede tener un
objeto string. Si se excede este valor, se lanza una excepción length_error.
BÚSQUEDA DE SUBCADENAS Y CARACTERES EN UN OBJETO STRING
La clase string proporciona funciones miembro const para buscar subcadenas y caracteres en
un objeto string. Algunas funciones derivadas y sus funciones son:
 rfind: realiza una búsqueda inversa en una cadena.
 find_first_of: localiza la primer ocurrencia de cualquier carácter.
 find_last_of: busca la última ocurrencia de cualquier carácter.
 find_first_not_of: busca el primer carácter que no está contenido en una cadena, la búsqueda se
realiza desde el final de la cadena. El objeto string en el que se realiza la búsqueda contiene
cada carácter especificado en el argumento de cadena. Si no se encuentra el carácter, se
devuelve string::npos.
7
REEMPLAZO DE CARACTERES EN UN OBJETO STRING
La función miembro erase de string sirve para borrar todo. Se utiliza find para localizar cada
ocurrencia del carácter de espacio. Cada espacio se reemplaza con un punto mediante una llamada a
la función miembro replace de string. La función replase recibe tres argumentos: el subíndice del
carácter en el objeto string en el que debe empezar el reemplazo, el número de caracteres a
reemplazar y la cadena de reemplazo. La función miembro find devuelve string::npos cuando no se
encuentra el carácter de búsqueda.
INSERCIÓN DE CARACTERES EN UN OBJETO STRING
La clase string proporciona funciones miembro para insertar caracteres en un objeto string. La
función miembro insert de string para insertar el contenido de una cadena antes del elemento 10 de
la otra cadena. Los últimos dos argumentos especifican los elementos iniciales y final de una cadena
que se debe insertar. Al utilizar string::npos, se inserta todo el objeto string.
CONVERSIÓN A CADENAS ESTILO C
La clase string proporciona funciones miembro para convertir objetos de la clase string en
cadenas basadas en apuntadores estilo C. se utiliza la función miembro copy de string para copiar el
objeto de una cadena en el arreglo char al que apunta ptr2. Se utiliza la función c_str para obtener
un apuntador const char* que apunte a una cadena estilo C con terminación nula. El apuntador se
para al operador de inserción de flujo para la salida. Se asigna al operador const char*ptr1 un
apuntador devuelto por la función miembro data de la clase string. Esta función miembro devuelve
un arreglo de caracteres estilo C sin terminación nula.
ITERADORES
La clase string proporciona iteradores para realizar recorridos hacia adelante y hacia atrás de
objetos string. Los iteradores proporcionan acceso a los caracteres individuales con una sintaxis
similar a las operaciones de los operadores. Un const_iterator es un iterator que no puede modificar
el objeto string; en este caso, el objeto string a través del cual esta iterando. Existen dos versiones
de begin: una que devuelve un iterator para iterar a través de un objeto string no const y una versión
const que devuelve un const_iterator para iterar a través de un objeto const_string. La función
miembro end de la clase string devuelve un objeto iterator para la posición que esta mas allá del
último elemento de la cadena. La clase string proporciona las funciones miembro rend y rbegin
para acceder a los caracteres individuales de un objeto string en forma inversa, desde el final de un
objeto string hacia su inicio. Las funciones miembro rend y rbegin devuelven objetos
reverse_iterator o const_reverse_iterator.
PROCESAMIENTO DE FLUJOS DE CADENA
Además de la E/S de flujos estándar y la E/S de flujos de archivos, en C++ la E/S de flujos
incluye herramientas para recibir datos de objetos string en la memoria. A estas herramientas se les
conoce como E/S en memoria o procesamiento de flujos de cadena. La entrada desde un objeto
8
string está soportada por la clase istringstream. La salida hacia un objeto string esta soportada por
la clase ostringstream. Los nombres de las clases istringstream y ostringstream son en realidad
alias definidos por las siguientes definiciones typedef.
typedef basic_istringstream< char > istringstream;
typedef basic_ostringstream< char > ostringstream;
La plantilla de clase basic_istringstream y basic_ostringstream proporciona la misma
funcionalidad que las clases istream y ostream, además de otras funciones miembro específicas para
el formato en memoria. Una aplicación para estas técnicas es la validación de datos. Un objeto
ostringstream utiliza un objeto string para almacenar los datos de salida. La función miembro str de
la clase ostringstream devuelve una copia de ese objeto string. Un objeto istringstream introduce
datos desde un objeto string en memoria a las variables del programa. Los datos se almacenan en un
objeto istringstream como caracteres. La operación de entrada desde el objeto istringstream
funciona de manera idéntica a las operaciones de entrada desde cualquier archivo. El objeto
istringstream interpreta el final del objeto string como el fin de archivo.
9
BIBLIOGRAFÍA
DEITEL, HARVEY M. Y PAUL J. DEITEL
Cómo programar en C++. Sexta edición
PEARSON EDUCACIÓN, México 2008
Páginas:
Manejo de exención 682 - 707
La clase string y el procesamiento de flujo de cadena 745 - 768
10

Contenu connexe

Tendances

Gestión de errores en Java
Gestión de errores en JavaGestión de errores en Java
Gestión de errores en Javaeccutpl
 
Las excepciones standar
Las excepciones standarLas excepciones standar
Las excepciones standarjbersosa
 
Manejo de excepciones en Java
Manejo de excepciones en JavaManejo de excepciones en Java
Manejo de excepciones en JavaJohn Ortiz
 
Excepciones
ExcepcionesExcepciones
Excepcioneskattybe
 
Programación III (Java) - 04 Excepciones
Programación III (Java) - 04 ExcepcionesProgramación III (Java) - 04 Excepciones
Programación III (Java) - 04 ExcepcionesAndoni Eguíluz Morán
 
Tema 4 excepciones por gio
Tema 4   excepciones por gioTema 4   excepciones por gio
Tema 4 excepciones por gioRobert Wolf
 
Excepciones en java
Excepciones en javaExcepciones en java
Excepciones en javajent46
 
Constructores & excepciones
Constructores & excepcionesConstructores & excepciones
Constructores & excepcionesJuan Mancilla
 
Exceptions (2)
Exceptions (2)Exceptions (2)
Exceptions (2)jbersosa
 
Java exceptions
Java exceptionsJava exceptions
Java exceptionssandropaul
 
1 1 5 Objetos Excepcion
1 1 5 Objetos Excepcion1 1 5 Objetos Excepcion
1 1 5 Objetos ExcepcionUVM
 
Tema 10 excepciones
Tema 10 excepcionesTema 10 excepciones
Tema 10 excepcionesjbersosa
 
OCP, JSE 6 Programmer (1Z0-851) - Guia practica 2 de 7(Flujos, Excepciones y ...
OCP, JSE 6 Programmer (1Z0-851) - Guia practica 2 de 7(Flujos, Excepciones y ...OCP, JSE 6 Programmer (1Z0-851) - Guia practica 2 de 7(Flujos, Excepciones y ...
OCP, JSE 6 Programmer (1Z0-851) - Guia practica 2 de 7(Flujos, Excepciones y ...Oscar V
 

Tendances (20)

Gestión de errores en Java
Gestión de errores en JavaGestión de errores en Java
Gestión de errores en Java
 
Las excepciones standar
Las excepciones standarLas excepciones standar
Las excepciones standar
 
Manejo de excepciones en Java
Manejo de excepciones en JavaManejo de excepciones en Java
Manejo de excepciones en Java
 
excepciones en java
excepciones en javaexcepciones en java
excepciones en java
 
Excepciones
ExcepcionesExcepciones
Excepciones
 
Programación III (Java) - 04 Excepciones
Programación III (Java) - 04 ExcepcionesProgramación III (Java) - 04 Excepciones
Programación III (Java) - 04 Excepciones
 
5.manejo de excepciones
5.manejo de excepciones5.manejo de excepciones
5.manejo de excepciones
 
Gestion de errores en java
Gestion de errores en javaGestion de errores en java
Gestion de errores en java
 
Tema 4 excepciones por gio
Tema 4   excepciones por gioTema 4   excepciones por gio
Tema 4 excepciones por gio
 
Excepciones en java
Excepciones en javaExcepciones en java
Excepciones en java
 
Constructores & excepciones
Constructores & excepcionesConstructores & excepciones
Constructores & excepciones
 
Lab excepciones
Lab excepcionesLab excepciones
Lab excepciones
 
Exceptions (2)
Exceptions (2)Exceptions (2)
Exceptions (2)
 
Manejo De Excepciones
Manejo De ExcepcionesManejo De Excepciones
Manejo De Excepciones
 
Java exceptions
Java exceptionsJava exceptions
Java exceptions
 
1 1 5 Objetos Excepcion
1 1 5 Objetos Excepcion1 1 5 Objetos Excepcion
1 1 5 Objetos Excepcion
 
Tema 10 excepciones
Tema 10 excepcionesTema 10 excepciones
Tema 10 excepciones
 
Excepciones
ExcepcionesExcepciones
Excepciones
 
OCP, JSE 6 Programmer (1Z0-851) - Guia practica 2 de 7(Flujos, Excepciones y ...
OCP, JSE 6 Programmer (1Z0-851) - Guia practica 2 de 7(Flujos, Excepciones y ...OCP, JSE 6 Programmer (1Z0-851) - Guia practica 2 de 7(Flujos, Excepciones y ...
OCP, JSE 6 Programmer (1Z0-851) - Guia practica 2 de 7(Flujos, Excepciones y ...
 
Excepciones
ExcepcionesExcepciones
Excepciones
 

Similaire à 3...3 manejo de excepciones y la clase string

Similaire à 3...3 manejo de excepciones y la clase string (20)

Resumen claudia u5
Resumen claudia u5Resumen claudia u5
Resumen claudia u5
 
Tipos de excepciones
Tipos de excepcionesTipos de excepciones
Tipos de excepciones
 
Capitulo II
Capitulo IICapitulo II
Capitulo II
 
Manejo de excepciones en vb
Manejo de excepciones en vbManejo de excepciones en vb
Manejo de excepciones en vb
 
Java5
Java5Java5
Java5
 
Excepciones
ExcepcionesExcepciones
Excepciones
 
Excepciones
ExcepcionesExcepciones
Excepciones
 
Resumen
ResumenResumen
Resumen
 
Resumen
ResumenResumen
Resumen
 
Jyoc java-cap12 excepciones
Jyoc java-cap12 excepcionesJyoc java-cap12 excepciones
Jyoc java-cap12 excepciones
 
Try catch
Try catchTry catch
Try catch
 
Taller 1 4
Taller 1 4Taller 1 4
Taller 1 4
 
6 excepciones
6 excepciones6 excepciones
6 excepciones
 
curso python básico fundación itgrarte Clase 6.pptx
curso python básico fundación itgrarte Clase 6.pptxcurso python básico fundación itgrarte Clase 6.pptx
curso python básico fundación itgrarte Clase 6.pptx
 
Excepciones en Java
Excepciones en JavaExcepciones en Java
Excepciones en Java
 
Uso de Excepciones en JAVA
Uso de Excepciones en JAVAUso de Excepciones en JAVA
Uso de Excepciones en JAVA
 
Programación Orientada a Objetos - Unidad 5 Excepciones
Programación Orientada a Objetos - Unidad 5 ExcepcionesProgramación Orientada a Objetos - Unidad 5 Excepciones
Programación Orientada a Objetos - Unidad 5 Excepciones
 
Cu00927 c gestion excepciones java try catch finally ejemplos ejercicios
Cu00927 c gestion excepciones java try catch finally ejemplos ejerciciosCu00927 c gestion excepciones java try catch finally ejemplos ejercicios
Cu00927 c gestion excepciones java try catch finally ejemplos ejercicios
 
Programación java1
Programación java1Programación java1
Programación java1
 
Actividad de proceso n7
Actividad de proceso n7Actividad de proceso n7
Actividad de proceso n7
 

Plus de Jacqui Venegas

4...4 tesis de maestria horacio alberto garcia salas
4...4 tesis de maestria horacio alberto garcia salas4...4 tesis de maestria horacio alberto garcia salas
4...4 tesis de maestria horacio alberto garcia salasJacqui Venegas
 
2...2 expresiones regulares, cerradura, fractales, automata
2...2 expresiones regulares, cerradura, fractales, automata2...2 expresiones regulares, cerradura, fractales, automata
2...2 expresiones regulares, cerradura, fractales, automataJacqui Venegas
 
1...1 noam chomsky (gramatica generativa, automata de pila, etc.)
1...1 noam chomsky (gramatica generativa, automata de pila, etc.)1...1 noam chomsky (gramatica generativa, automata de pila, etc.)
1...1 noam chomsky (gramatica generativa, automata de pila, etc.)Jacqui Venegas
 
6... producciones por derecha e izquierda
6... producciones por derecha e izquierda6... producciones por derecha e izquierda
6... producciones por derecha e izquierdaJacqui Venegas
 
5... reglas de produccion
5... reglas de produccion5... reglas de produccion
5... reglas de produccionJacqui Venegas
 
4... alfabeto de cadenas
4... alfabeto de cadenas4... alfabeto de cadenas
4... alfabeto de cadenasJacqui Venegas
 
3... union y concatenacion de cadenas
3... union y concatenacion de cadenas3... union y concatenacion de cadenas
3... union y concatenacion de cadenasJacqui Venegas
 
1... conversor de bases
1... conversor de bases1... conversor de bases
1... conversor de basesJacqui Venegas
 

Plus de Jacqui Venegas (10)

4...4 tesis de maestria horacio alberto garcia salas
4...4 tesis de maestria horacio alberto garcia salas4...4 tesis de maestria horacio alberto garcia salas
4...4 tesis de maestria horacio alberto garcia salas
 
2...2 expresiones regulares, cerradura, fractales, automata
2...2 expresiones regulares, cerradura, fractales, automata2...2 expresiones regulares, cerradura, fractales, automata
2...2 expresiones regulares, cerradura, fractales, automata
 
1...1 noam chomsky (gramatica generativa, automata de pila, etc.)
1...1 noam chomsky (gramatica generativa, automata de pila, etc.)1...1 noam chomsky (gramatica generativa, automata de pila, etc.)
1...1 noam chomsky (gramatica generativa, automata de pila, etc.)
 
7... automata de pila
7... automata de pila7... automata de pila
7... automata de pila
 
6... producciones por derecha e izquierda
6... producciones por derecha e izquierda6... producciones por derecha e izquierda
6... producciones por derecha e izquierda
 
5... reglas de produccion
5... reglas de produccion5... reglas de produccion
5... reglas de produccion
 
4... alfabeto de cadenas
4... alfabeto de cadenas4... alfabeto de cadenas
4... alfabeto de cadenas
 
3... union y concatenacion de cadenas
3... union y concatenacion de cadenas3... union y concatenacion de cadenas
3... union y concatenacion de cadenas
 
2... arbol binario
2... arbol binario2... arbol binario
2... arbol binario
 
1... conversor de bases
1... conversor de bases1... conversor de bases
1... conversor de bases
 

Dernier

hitos del desarrollo psicomotor en niños.docx
hitos del desarrollo psicomotor en niños.docxhitos del desarrollo psicomotor en niños.docx
hitos del desarrollo psicomotor en niños.docxMarcelaArancibiaRojo
 
Manual_Identificación_Geoformas_140627.pdf
Manual_Identificación_Geoformas_140627.pdfManual_Identificación_Geoformas_140627.pdf
Manual_Identificación_Geoformas_140627.pdfedsonzav8
 
CLASe número 4 fotogrametria Y PARALAJE.pptx
CLASe número 4 fotogrametria Y PARALAJE.pptxCLASe número 4 fotogrametria Y PARALAJE.pptx
CLASe número 4 fotogrametria Y PARALAJE.pptxbingoscarlet
 
Obras paralizadas en el sector construcción
Obras paralizadas en el sector construcciónObras paralizadas en el sector construcción
Obras paralizadas en el sector construcciónXimenaFallaLecca1
 
Reporte de Exportaciones de Fibra de alpaca
Reporte de Exportaciones de Fibra de alpacaReporte de Exportaciones de Fibra de alpaca
Reporte de Exportaciones de Fibra de alpacajeremiasnifla
 
Calavera calculo de estructuras de cimentacion.pdf
Calavera calculo de estructuras de cimentacion.pdfCalavera calculo de estructuras de cimentacion.pdf
Calavera calculo de estructuras de cimentacion.pdfyoseka196
 
Residente de obra y sus funciones que realiza .pdf
Residente de obra y sus funciones que realiza  .pdfResidente de obra y sus funciones que realiza  .pdf
Residente de obra y sus funciones que realiza .pdfevin1703e
 
Magnetismo y electromagnetismo principios
Magnetismo y electromagnetismo principiosMagnetismo y electromagnetismo principios
Magnetismo y electromagnetismo principiosMarceloQuisbert6
 
Condensadores de la rama de electricidad y magnetismo
Condensadores de la rama de electricidad y magnetismoCondensadores de la rama de electricidad y magnetismo
Condensadores de la rama de electricidad y magnetismosaultorressep
 
CHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONAL
CHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONALCHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONAL
CHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONALKATHIAMILAGRITOSSANC
 
Elaboración de la estructura del ADN y ARN en papel.pdf
Elaboración de la estructura del ADN y ARN en papel.pdfElaboración de la estructura del ADN y ARN en papel.pdf
Elaboración de la estructura del ADN y ARN en papel.pdfKEVINYOICIAQUINOSORI
 
Clase 7 MECÁNICA DE FLUIDOS 2 INGENIERIA CIVIL
Clase 7 MECÁNICA DE FLUIDOS 2 INGENIERIA CIVILClase 7 MECÁNICA DE FLUIDOS 2 INGENIERIA CIVIL
Clase 7 MECÁNICA DE FLUIDOS 2 INGENIERIA CIVILProblemSolved
 
Procesos-de-la-Industria-Alimentaria-Envasado-en-la-Produccion-de-Alimentos.pptx
Procesos-de-la-Industria-Alimentaria-Envasado-en-la-Produccion-de-Alimentos.pptxProcesos-de-la-Industria-Alimentaria-Envasado-en-la-Produccion-de-Alimentos.pptx
Procesos-de-la-Industria-Alimentaria-Envasado-en-la-Produccion-de-Alimentos.pptxJuanPablo452634
 
Flujo multifásico en tuberias de ex.pptx
Flujo multifásico en tuberias de ex.pptxFlujo multifásico en tuberias de ex.pptx
Flujo multifásico en tuberias de ex.pptxEduardoSnchezHernnde5
 
aCARGA y FUERZA UNI 19 marzo 2024-22.ppt
aCARGA y FUERZA UNI 19 marzo 2024-22.pptaCARGA y FUERZA UNI 19 marzo 2024-22.ppt
aCARGA y FUERZA UNI 19 marzo 2024-22.pptCRISTOFERSERGIOCANAL
 
Tinciones simples en el laboratorio de microbiología
Tinciones simples en el laboratorio de microbiologíaTinciones simples en el laboratorio de microbiología
Tinciones simples en el laboratorio de microbiologíaAlexanderimanolLencr
 
tema05 estabilidad en barras mecanicas.pdf
tema05 estabilidad en barras mecanicas.pdftema05 estabilidad en barras mecanicas.pdf
tema05 estabilidad en barras mecanicas.pdfvictoralejandroayala2
 
Una estrategia de seguridad en la nube alineada al NIST
Una estrategia de seguridad en la nube alineada al NISTUna estrategia de seguridad en la nube alineada al NIST
Una estrategia de seguridad en la nube alineada al NISTFundación YOD YOD
 
PPT ELABORARACION DE ADOBES 2023 (1).pdf
PPT ELABORARACION DE ADOBES 2023 (1).pdfPPT ELABORARACION DE ADOBES 2023 (1).pdf
PPT ELABORARACION DE ADOBES 2023 (1).pdfalexquispenieto2
 

Dernier (20)

hitos del desarrollo psicomotor en niños.docx
hitos del desarrollo psicomotor en niños.docxhitos del desarrollo psicomotor en niños.docx
hitos del desarrollo psicomotor en niños.docx
 
Manual_Identificación_Geoformas_140627.pdf
Manual_Identificación_Geoformas_140627.pdfManual_Identificación_Geoformas_140627.pdf
Manual_Identificación_Geoformas_140627.pdf
 
CLASe número 4 fotogrametria Y PARALAJE.pptx
CLASe número 4 fotogrametria Y PARALAJE.pptxCLASe número 4 fotogrametria Y PARALAJE.pptx
CLASe número 4 fotogrametria Y PARALAJE.pptx
 
Obras paralizadas en el sector construcción
Obras paralizadas en el sector construcciónObras paralizadas en el sector construcción
Obras paralizadas en el sector construcción
 
Reporte de Exportaciones de Fibra de alpaca
Reporte de Exportaciones de Fibra de alpacaReporte de Exportaciones de Fibra de alpaca
Reporte de Exportaciones de Fibra de alpaca
 
Calavera calculo de estructuras de cimentacion.pdf
Calavera calculo de estructuras de cimentacion.pdfCalavera calculo de estructuras de cimentacion.pdf
Calavera calculo de estructuras de cimentacion.pdf
 
Residente de obra y sus funciones que realiza .pdf
Residente de obra y sus funciones que realiza  .pdfResidente de obra y sus funciones que realiza  .pdf
Residente de obra y sus funciones que realiza .pdf
 
Magnetismo y electromagnetismo principios
Magnetismo y electromagnetismo principiosMagnetismo y electromagnetismo principios
Magnetismo y electromagnetismo principios
 
Condensadores de la rama de electricidad y magnetismo
Condensadores de la rama de electricidad y magnetismoCondensadores de la rama de electricidad y magnetismo
Condensadores de la rama de electricidad y magnetismo
 
CHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONAL
CHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONALCHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONAL
CHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONAL
 
Elaboración de la estructura del ADN y ARN en papel.pdf
Elaboración de la estructura del ADN y ARN en papel.pdfElaboración de la estructura del ADN y ARN en papel.pdf
Elaboración de la estructura del ADN y ARN en papel.pdf
 
Clase 7 MECÁNICA DE FLUIDOS 2 INGENIERIA CIVIL
Clase 7 MECÁNICA DE FLUIDOS 2 INGENIERIA CIVILClase 7 MECÁNICA DE FLUIDOS 2 INGENIERIA CIVIL
Clase 7 MECÁNICA DE FLUIDOS 2 INGENIERIA CIVIL
 
Procesos-de-la-Industria-Alimentaria-Envasado-en-la-Produccion-de-Alimentos.pptx
Procesos-de-la-Industria-Alimentaria-Envasado-en-la-Produccion-de-Alimentos.pptxProcesos-de-la-Industria-Alimentaria-Envasado-en-la-Produccion-de-Alimentos.pptx
Procesos-de-la-Industria-Alimentaria-Envasado-en-la-Produccion-de-Alimentos.pptx
 
Flujo multifásico en tuberias de ex.pptx
Flujo multifásico en tuberias de ex.pptxFlujo multifásico en tuberias de ex.pptx
Flujo multifásico en tuberias de ex.pptx
 
aCARGA y FUERZA UNI 19 marzo 2024-22.ppt
aCARGA y FUERZA UNI 19 marzo 2024-22.pptaCARGA y FUERZA UNI 19 marzo 2024-22.ppt
aCARGA y FUERZA UNI 19 marzo 2024-22.ppt
 
Tinciones simples en el laboratorio de microbiología
Tinciones simples en el laboratorio de microbiologíaTinciones simples en el laboratorio de microbiología
Tinciones simples en el laboratorio de microbiología
 
VALORIZACION Y LIQUIDACION MIGUEL SALINAS.pdf
VALORIZACION Y LIQUIDACION MIGUEL SALINAS.pdfVALORIZACION Y LIQUIDACION MIGUEL SALINAS.pdf
VALORIZACION Y LIQUIDACION MIGUEL SALINAS.pdf
 
tema05 estabilidad en barras mecanicas.pdf
tema05 estabilidad en barras mecanicas.pdftema05 estabilidad en barras mecanicas.pdf
tema05 estabilidad en barras mecanicas.pdf
 
Una estrategia de seguridad en la nube alineada al NIST
Una estrategia de seguridad en la nube alineada al NISTUna estrategia de seguridad en la nube alineada al NIST
Una estrategia de seguridad en la nube alineada al NIST
 
PPT ELABORARACION DE ADOBES 2023 (1).pdf
PPT ELABORARACION DE ADOBES 2023 (1).pdfPPT ELABORARACION DE ADOBES 2023 (1).pdf
PPT ELABORARACION DE ADOBES 2023 (1).pdf
 

3...3 manejo de excepciones y la clase string

  • 1. UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO CENTRO UNIVERSITARIO UAEM ATLACOMULCO AUTÓMATAS Y LENGUAJES FORMALES ALUMNA: ALETVIA JACQUELINE LEÓN VENEGAS TEMAS:  MANEJO DE EXCEPCIONES  LA CLASE STRING Y EL PROCESAMIENTO DE FLUJO DE CADENA ING. HECTOR CABALLERO HERNANDEZ INGENIERÍA EN COMPUTACIÓN ICO-19 ATLACOMULCO, MÉX. A 20 DE ABRIL DE 2015.
  • 2. ÍNDICE  MANEJO DE EXCEPCIONES……………………………………………………… 1  LA CLASE STRING Y EL PROCESAMIENTO DE FLUJO DE CADENA......... 6  BIBLIOGRAFÍA…………………………………………………………………….. 10
  • 3. MANEJO DE EXCEPCIONES El manejo de excepciones permite al programador remover el código para manejo de errores de la “línea principal” de ejecución del programa, lo cual mejora la claridad y capacidad de modificación del mismo. Los programadores pueden optar por manejar cualquier excepción que deseen; esta flexibilidad reduce la probabilidad de que los errores se pasen por alto y, por consecuencia, hace que los programas sean más robustos. La clase runtime_error, una clase derivada de la clase exception, es la base estándar de C++ para representar errores en tiempo de ejecución. La clase exception es la clase base estándar de C++ para todas las excepciones. Una clase de excepción típica que se deriva de la clase runtime_error define solo un constructor que pasa una cadena de mensaje de error al constructor de la clase base runtime_error. Cada clase de excepción que se deriva de forma directa o indirecta de exception contiene la función virtual what, la cual devuelve el mensaje de error de un objeto excepción. ENCERRAR CÓDIGO EN UN BLOQUE TRY El manejo de excepciones está orientado a situaciones en las que la función que detecta un error no puede manejarlo. C++ proporciona bloques try para permitir el manejo de excepciones. Un bloque try consiste en la palabra clave try, seguida de llaves ({}) que definen un bloque de código en el que podrían ocurrir errores. El bloque try encierra instrucciones que podrían ocasionar excepciones, e instrucciones que se deberían omitir si ocurre una excepción. Las excepciones pueden surgir a través de código mencionado de forma explícita en un bloque try, a través de las llamadas a otras funciones y a través de llamadas a funciones con muchos niveles de anidamiento, iniciadas por el código en un bloque try. DEFINICIÓN DE UN MANEJADOR CATCH Las excepciones se procesan mediante los manejadores catch que atrapan y manejan las excepciones. Cada manejador catch empieza con la palabra clave catch y especifica entre paréntesis un parámetro de excepción que representa el tipo de excepción que puede procesar el manejador catch. Cuando ocurre una excepción en un bloque try, el manejador catch que se ejecuta es aquél cuyo tipo coincide con el tipo de la excepción que ocurrió. Si un parámetro de excepción incluye un nombre de parámetro opcional, el manejador catch puede usar ese nombre de parámetro para 1
  • 4. interactuar con la excepción atrapada en el cuerpo del manejador catch, que está delimitado por llaves ({y}). Por lo general, un manejador catch reporta el error al usuario, lo registra en un archivo, termina el programa sin que haya pérdida de datos o intenta una estrategia alterna para realizar la tarea fallida. MODELO DE TERMINACIÓN DEL MANEJO DE EXCEPCIONES Si ocurre una excepción como resultado de una instrucción en un bloque try, este bloque expira. A continuación, el programa busca el primer manejador catch que pueda procesar el tipo de excepción que ocurrió. El programa localiza el catch que coincida, comparando el tipo de excepción lanzada con el tipo del parámetro de excepción de cada catch, hasta que el programa encuentra una coincidencia. Cuando ocurre una coincidencia, se ejecuta el código contenido en el manejador catch que coincide. Cuando un manejador catch termina su procesamiento al llegar a su llave derecha de cierre (}), se considera que la excepción se manejó y las variables locales definidas dentro del manejador catch queda fuera de alcance. El control del programa no regresa al punto en el que ocurrió la excepción debido a que el bloque try ha expirado. El control continúa con la primera instrucción después del último manejador catch que sigue del bloque try. A eso se le conoce como modelo de terminación del manejo de excepciones. Si el bloque try completa su ejecución con éxito, entonces el programa ignora los manejadores catch y el control del programa continua con la primera instrucción después del último bloque catch que sigue de ese bloque try. Si una excepción que ocurre en un bloque try no tiene un manejador catch que coincida, o si una excepción ocurre en una instrucción que no se encuentre dentro de un bloque try, la función que contiene la instrucción termina de inmediato y el programa intenta localizar un bloque try circundante en la función que hizo la llamada. A este proceso se le conoce como limpieza de la pila. Para lanzar una excepción, se utiliza la palabra clave throw seguida de un operador que representa el tipo de excepción a lanzar. Por lo general, una instrucción throw especifica un operando, esté operando puede ser de cualquier tipo. Si el operando es un objeto, lo llamamos objeto excepción. Sin embargo, un operador de throw también puede asumir otros valores, como el valor de una expresión que no produce un objeto o el valor de un int. El operando throw se utiliza para inicializar el parámetro en el manejador catch. Esta es una característica central del manejo de 2
  • 5. excepciones: una función debe lanzar una excepción antes de que el error tenga la oportunidad de manifestarse. CUANDO UTILIZAR EL MANEJO DE EXCEPCIONES El manejo de excepciones está diseñado para procesar errores síncronos, que ocurren cuando se ejecuta una instrucción. El manejo de excepciones no está diseñado para procesar los errores asociados con los eventos síncronos los cuales ocurren en paralelo con, y de manera independiente a, el flujo de control del programa. El mecanismo de manejo de errores también es útil para procesar problemas que ocurren cuando un programa interactúa con los elementos de software, con las funciones miembro, los constructores, los destructores y las clases. En vez de manejar los problemas de manera interna, dichos elementos de software utilizan comúnmente las excepciones para notificar a los programas cuando ocurren problemas. VOLVER A LANZAR UNA EXCEPCIÓN Es posible que un manejador de excepciones, al momento de recibir una excepción, decida que no puede procesar esa excepción o que puede procesar la excepción solo de manera parcial. En tales casos, el manejador de excepciones puede diferir el manejo de excepciones a otro manejador de excepciones. En cualquier caso, para lograr esto hay que volver a lanzar la excepción mediante la siguiente instrucción: throw; ESPECIFICACIONES DE EXCEPCIONES Una especificación de excepciones opcional encuentra una lista de excepciones que puede lanzar una función. Una función solo puede lanzar excepciones de los tipos indicados por la especificación, o excepciones de cualquier tipo derivado de estos tipos. Si la función lanza una excepción que no pertenezca a un tipo especificado, el mecanismo de manejo de excepciones llama a la función unexpected, la cual termina el programa. Una función que no proporciona una especificación de excepciones puede lanzar cualquier excepción. Al colocar throw() después de la lista de parámetros de una función, se establece que esta función no lanza excepciones. Si la función intenta lanzar una excepción, se invoca la función unexpected. 3
  • 6. PROCESAMIENTO DE EXCEPCIONES INESPERADAS La función unexpected llama a la función registrada con la función set_unexpected. Si no se ha registrado una función de esta forma, se hace una llamada a la función terminate de manera predeterminada. Los casos en los que se hace una llamada a la función terminate son: 1. El mecanismo de excepción no puede encontrar un catch que coincida para una excepción que se haya lanzado. 2. Un destructor intenta lanzar una excepción durante la limpieza de la pila. 3. Hay un intento de volver a lanzar una excepción cuando no se esté manejando una excepción en un momento dado. 4. Una llamada a la función unexpected realiza una llamada a la función terminate de manera predeterminada. La función set_terminate puede especificar la función a invocar cuando se haga la llamada a terminate. En caso contrario, terminate llama a abort, con lo cual se termina el programa sin llamar a los destructores de cualquier objeto restante de una clase de almacenamiento estático o automático. Esto podría conllevar a fugas de recursos cuando un programa termina en forma prematura. Las funciones set_terminate y set_unexpected devuelven un apuntador a la última función llamada por terminate y unexpected, respectivamente. Las funciones set_terminate y set_unexpected reciben como argumentos apuntadores a funciones con tipos de valores de retorno void y sin argumentos. LIMPIEZA DE LA PILA Cuando se lanza una excepción pero no se atrapa en un alcance en específico, la pila de llamadas a funciones se “limpia” y se hace un intento de atrapar (catch) la excepción en el siguiente bloque try. Limpiar la pila de llamadas a funciones significa que la función en la que no se atrapó la excepción termina, todas las variables locales en la función se destruyen y el control regresa a la instrucción que invocó originalmente a esa función. CONSTRUCTORES, DESTRUCTORES Y MANEJO DE EXCEPCIONES Las excepciones lanzadas por un constructor hacen que se llame a los destructores de todos los objetos creados como parte del objeto que se está construyendo, antes de que se lance la excepción. Cada objeto automático construido en un bloque try se destruye antes de lanzar una excepción. La 4
  • 7. limpieza de la pila se completa antes de que un manejador de excepciones empiece a ejecutarse. Si un destructor invocado como resultado de la limpieza de la pila lanza una excepción, se hace una llamada a terminate. Si un objeto tiene objetos miembros, y si se lanza una excepción antes de que el objeto exterior este completamente construido, entonces se ejecutaran los destructores de los objetos miembro que se hayan construido antes de que ocurra la excepción. Si se han construido parcialmente un arreglo de objetos cuando ocurre una excepción, solo se llamara a los destructores para los objetos elementos del arreglo que estén construidos. Cuando se lanza una excepción desde el constructor para un objeto que se crea en una excepción new, se libera la memoria asignada en forma dinámica para ese objeto. PROCESAMIENTO DE LAS FALLAS DE NEW El estándar de C++ especifica que, cuando falla el operador new, lanza una excepción bad_alloc. MANEJO DE LAS FALLAS DE NEW MEDIANTE LA FUNCIÓN SET_NEW_HANDLER Una característica adicional para manejar las fallas de new es la función set_new_handler. Esta función recibe como argumento un apuntador a una función que no recibe argumentos y devuelve void. Una vez que set_new_handler registra un manejador de new en el programa, el operador new no lanza bad_alloc en el futuro. El estándar de C++ especifica que la función manejadora de new debe realizar una de las siguientes tareas: 1. Hacer mas memoria disponible al eliminar otra parte de la memoria asignada en forma dinámica y regresar al operador new para tratar de asignar memoria otra vez. 2. Lanzar una excepción de tipo bad_alloc. 3. Llamar a la función abort o exit para terminar el programa. LA CLASE AUTO_PTR Y LA ASIGNACIÓN DINÁMICA DE MEMORIA Un objeto de la clase auto_ptr mantiene un apuntador a la memoria que se asigna en forma dinámica. Cuando se hace una llamada al destructor de un objeto auto_ptr, realiza una operación delete con su miembro de datos apuntador. La plantilla de clase auto_ptr proporciona los operadores sobrecargados * y ->, de manera que un objeto auto_ptr se puede utilizar de la misma forma que una variable apuntador común. 5
  • 8. JERARQUÍA DE EXCEPXIONES DE LA BIBLIOTECA ESTÁNDAR La Biblioteca estándar de C++ incluye una jerarquía de clases de excepciones. Esta jerarquía está encabezada por la clase base exception. Algunas derivadas y sus funciones son las siguientes:  logic_error: es la clase base de varias clases de excepciones estándar que indican errores en la lógica del programa.  invalid_argument: indica que se pasó un argumento inválido a una función.  length_error: indica que para ese objeto se objeto se utilizo una longitud mayor que el tamaño máximo permitido para el objeto que se está manipulando.  out_of_range: indica que un valor, como un subíndice en un arreglo, excedió su rango permitido de valores.  runtime_error: indica errores en tiempo de ejecución.  overflow_error: describe un error de desbordamiento aritmético.  underflow_error: describe un error de subdesbordamiento. LA CLASE STRING Y EL PROCESAMIENTO DE FLUJOS DE CADENA La plantilla de clase basic_string proporciona operaciones comunes de manipulación de cadenas, como copiar, realizar búsquedas, etc. La definición de la plantilla y todas las herramientas de soporte se definen en el espacio de nombres, éstas incluyen la instrucción typedef, ésta se proporciona para el tipo wchar_t. el tipo wchar_t almacena caracteres para soportar otros conjuntos de caracteres. La longitud de un objeto string se puede obtener mediante la función miembro length y mediante la función miembro size. El operador subíndice ([]), se puede utilizar con objetos string para acceder a los caracteres individuales y modificarlos. ASIGNACIÓN Y CONCATENACIÓN DE OBJETOS STRING La clase string proporciona el operador operator = sobrecargado y la función miembro assign para asignaciones de de objetos string. El operador subíndice ([]) proporciona acceso de lectura/escritura para cualquier elemento de un objeto string. La función miembro at de string proporciona acceso comprobado; al ir mas allá de cualquiera de los extremos del objeto string se lanza una excepción out_of_range. El operador subíndice ([]) no proporciona acceso comprobado. La clase string proporciona los operadores + y += sobrecargados, y la función miembro append para realizar la concatenación de objetos string. 6
  • 9. COMPARACION DE OBJETOS STRING La clase string proporciona los operadores sobrecargados ==, ¡=, <, >, <´= y >= para las comparaciones de objetos string. La función miembro compare de string compara dos objetos string y devuelve 0 si los objetos string son iguales, un número positivo si el primer objeto string es lexicográficamente mayor que el segundo, o un número negativo si el primer objeto string es lexicográficamente menor que el segundo. SUBCADENAS La clase string proporciona la función miembro substr para obtener una subcadena de un objeto string. El resultado es un nuevo objeto string que se copia del objeto string de origen. INTERCAMBIO DE OBJETOS STRING La clase string proporciona la función miembro swap para intercambiar objetos string. La función miembro swap de string es útil para implementar programas que ordenan cadenas. CARACTERÍSTICAS DE LOS OBJETOS STRING La clase string proporciona funciones miembro para recopilar información acerca del tamaño de un objeto string, su longitud, capacidad, longitud máxima y otras características. El tamaño o la longitud de un objeto string es el número de caracteres actualmente almacenados en el objeto string. La capacidad de un objeto string es el número de caracteres que se pueden almacenar en el objeto string sin necesidad de asignar más memoria. La capacidad de un objeto string debe ser cuando menos igual a su tamaño actual, aunque puede ser mayor. La capacidad exacta de un objeto string depende de la implementación. El tamaño máximo es el mayor tamaño posible que puede tener un objeto string. Si se excede este valor, se lanza una excepción length_error. BÚSQUEDA DE SUBCADENAS Y CARACTERES EN UN OBJETO STRING La clase string proporciona funciones miembro const para buscar subcadenas y caracteres en un objeto string. Algunas funciones derivadas y sus funciones son:  rfind: realiza una búsqueda inversa en una cadena.  find_first_of: localiza la primer ocurrencia de cualquier carácter.  find_last_of: busca la última ocurrencia de cualquier carácter.  find_first_not_of: busca el primer carácter que no está contenido en una cadena, la búsqueda se realiza desde el final de la cadena. El objeto string en el que se realiza la búsqueda contiene cada carácter especificado en el argumento de cadena. Si no se encuentra el carácter, se devuelve string::npos. 7
  • 10. REEMPLAZO DE CARACTERES EN UN OBJETO STRING La función miembro erase de string sirve para borrar todo. Se utiliza find para localizar cada ocurrencia del carácter de espacio. Cada espacio se reemplaza con un punto mediante una llamada a la función miembro replace de string. La función replase recibe tres argumentos: el subíndice del carácter en el objeto string en el que debe empezar el reemplazo, el número de caracteres a reemplazar y la cadena de reemplazo. La función miembro find devuelve string::npos cuando no se encuentra el carácter de búsqueda. INSERCIÓN DE CARACTERES EN UN OBJETO STRING La clase string proporciona funciones miembro para insertar caracteres en un objeto string. La función miembro insert de string para insertar el contenido de una cadena antes del elemento 10 de la otra cadena. Los últimos dos argumentos especifican los elementos iniciales y final de una cadena que se debe insertar. Al utilizar string::npos, se inserta todo el objeto string. CONVERSIÓN A CADENAS ESTILO C La clase string proporciona funciones miembro para convertir objetos de la clase string en cadenas basadas en apuntadores estilo C. se utiliza la función miembro copy de string para copiar el objeto de una cadena en el arreglo char al que apunta ptr2. Se utiliza la función c_str para obtener un apuntador const char* que apunte a una cadena estilo C con terminación nula. El apuntador se para al operador de inserción de flujo para la salida. Se asigna al operador const char*ptr1 un apuntador devuelto por la función miembro data de la clase string. Esta función miembro devuelve un arreglo de caracteres estilo C sin terminación nula. ITERADORES La clase string proporciona iteradores para realizar recorridos hacia adelante y hacia atrás de objetos string. Los iteradores proporcionan acceso a los caracteres individuales con una sintaxis similar a las operaciones de los operadores. Un const_iterator es un iterator que no puede modificar el objeto string; en este caso, el objeto string a través del cual esta iterando. Existen dos versiones de begin: una que devuelve un iterator para iterar a través de un objeto string no const y una versión const que devuelve un const_iterator para iterar a través de un objeto const_string. La función miembro end de la clase string devuelve un objeto iterator para la posición que esta mas allá del último elemento de la cadena. La clase string proporciona las funciones miembro rend y rbegin para acceder a los caracteres individuales de un objeto string en forma inversa, desde el final de un objeto string hacia su inicio. Las funciones miembro rend y rbegin devuelven objetos reverse_iterator o const_reverse_iterator. PROCESAMIENTO DE FLUJOS DE CADENA Además de la E/S de flujos estándar y la E/S de flujos de archivos, en C++ la E/S de flujos incluye herramientas para recibir datos de objetos string en la memoria. A estas herramientas se les conoce como E/S en memoria o procesamiento de flujos de cadena. La entrada desde un objeto 8
  • 11. string está soportada por la clase istringstream. La salida hacia un objeto string esta soportada por la clase ostringstream. Los nombres de las clases istringstream y ostringstream son en realidad alias definidos por las siguientes definiciones typedef. typedef basic_istringstream< char > istringstream; typedef basic_ostringstream< char > ostringstream; La plantilla de clase basic_istringstream y basic_ostringstream proporciona la misma funcionalidad que las clases istream y ostream, además de otras funciones miembro específicas para el formato en memoria. Una aplicación para estas técnicas es la validación de datos. Un objeto ostringstream utiliza un objeto string para almacenar los datos de salida. La función miembro str de la clase ostringstream devuelve una copia de ese objeto string. Un objeto istringstream introduce datos desde un objeto string en memoria a las variables del programa. Los datos se almacenan en un objeto istringstream como caracteres. La operación de entrada desde el objeto istringstream funciona de manera idéntica a las operaciones de entrada desde cualquier archivo. El objeto istringstream interpreta el final del objeto string como el fin de archivo. 9
  • 12. BIBLIOGRAFÍA DEITEL, HARVEY M. Y PAUL J. DEITEL Cómo programar en C++. Sexta edición PEARSON EDUCACIÓN, México 2008 Páginas: Manejo de exención 682 - 707 La clase string y el procesamiento de flujo de cadena 745 - 768 10