clase string y manejo de excepciones

17
CALIFICACION

Upload: aliciasandovalcamacho

Post on 12-Apr-2017

184 views

Category:

Engineering


2 download

TRANSCRIPT

Page 1: Clase string y manejo de excepciones

CALIFICACION

Page 2: Clase string y manejo de excepciones

CENTRO UNIVERSITARIO UAEM ATLACOMULCO

INGENIERIA EN COMPUTACION

AUTOMATAS Y LENGUAJES FORMALES

ALUMNA: ALICIA SANDOVAL CAMACHO

PROFESOR: HECTOR CABALLERO HERNANDEZ

2° SEMESTRE TURNO MATUTINO

FECHA DE ENTREGA: 21-04-2015

Page 3: Clase string y manejo de excepciones

CLASE STRING

La instrucción typedef basic_string <char> cadena; crea el tipo de alias string para basic string

<char>. También se proporciona una instrucción typedef para el tipo wchar_t, por lo general este

tipo almacena caracteres de dos bytes (16 bits) para soportar otros conjuntos de caracteres. El

tamaño de wchar_t no se fija en base al estándar.

Para utilizar objetos string, incluya el archivo de encabezado <string>, la clase string no

proporciona constructores que convierten de int o char a string.

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 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 más 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 a los operadores + y +- sobrecargados, y la función miembro append

para realizar la concatenación de objetos string.

Comparación 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 de string (o subcadenas) y devuelve

0 si los objetos string son iguales, un numero positivo si el primer objeto string es

lexicográficamente mayor que el segundo, o un numero negativo si el primer objeto string es menor

que el segundo.

Subcadenas

Page 4: Clase string y manejo de excepciones

La función miembro substr de string obtiene una subcadena de un objeto string.

Intercambio de objetos string

La función miembro swap de string intercambia el contenido de dos objetos string.

Características de los objetos string

Las funciones miembro size y length de string devuelven el tamaño o la longitud de un

objeto string.

La función capacity devuelve el número total de caracteres que se pueden almacenar en el

objeto string sin incrementar la cantidad de memoria asignada al mismo.

La función max_size devuelve el tamaño máximo que puede tener un objeto string.

La función resize modifica la longitud de un objeto string.

Búsqueda de subcadenas y caracteres en un objeto string

Page 5: Clase string y manejo de excepciones

La funciones de búsqueda find rfind, find_first_of, find_last_of, y find_first_not_of localizan

subcadenas o caracteres en un objeto string.

Remplazo de caracteres en un objeto string

La función erase elimina elementos de un objeto string.

La función replace reemplaza los caracteres de un objeto string.

Inserción de caracteres en un objeto string.

La función insert inserta caracteres en un objeto string.

Conversión a cadenas estilo C

La función c_str devuelve un apuntador const*char que apunta a una cadena de caracteres estilo C

que contiene todos los caracteres en un objeto string.

La función data devuelve un apuntador const*char que apunta a un arreglo de caracteres estilo C

sin terminación nula, que contiene todos los caracteres en un objeto string.

Iteradores

La clase string proporciona las funciones end y begin para iterar a través de elementos individuales.

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 del objeto string, hasta el inicio.

Page 6: Clase string y manejo de excepciones

Procesamiento de flujos de cadena

La entrada desde un objeto string esta soportada por la clase istringstream. La salida hacia un

objeto string esta soportada por la clase ostringstream.

La función str de ostringstream devuelve una copia string de un objeto string.

Page 7: Clase string y manejo de excepciones

MANEJO DE EXCEPCIONES

Generalidades:

El manejo de excepciones permite al programador eliminar el código de manejo de errores de la

“línea principal” de ejecución del programa, lo cual mejora la claridad del programa y su capacidad

de modificación.

Ejemplo: manejo de un intento de dividir entre cero.

La clase excepción es la base estándar de C++ para las excepciones. La clase excepción proporciona

la función virtual what, que devuelve un mensaje de error apropiado y puede sobrescribirse en las

clases derivadas.

La clase runtime_error (definida en el encabezado <stdexcept) es la base estándar de C++ para

representar los errores en tiempo de ejecución. C++ utiliza el modelo de terminación del manejo de

excepciones.

Un bloque try consiste en la palabra clave try, seguida de las llaves ({}) que definen un bloque de

código en el que podrían ocurrir excepciones. El bloque try encierra instrucciones que podrían

producir excepciones, e instrucciones que no deben ejecutarse si se producen excepciones. Por lo

menos debe haber un manejo catch justo después de un bloque try. Cada manejador catch

especifica un parámetro de excepción que representa el tipo de excepción que el manejador catch

puede procesar.

Page 8: Clase string y manejo de excepciones

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 interactuar con un objeto excepción atrapado. El punto en el

programa en el que ocurre una excepción se conoce como el punto de lanzamiento.

Si ocurre una excepción en un bloque try, este bloque expira y el control del programa se transfiere

al primer catch en el que coincida el tipo del parámetro para interactuar con un objeto excepción

atrapado.

Cuando un bloque try termina, las variables locales definidas en el bloque quedan fuera de alcance

y cuando termina debido a una excepción, e programa busca el primer manejador catch que pueda

procesar el tipo de excepción que ocurrió. Para localizar el catch que coincida, el programa compara

el tipo de la excepción lanzada con el tipo del parámetro de excepción de cada catch hasta que el

programa encuentra una coincidencia, esto ocurre si los tipos son idénticos, o si el tipo de la

excepción lanzada es una clase derivada del tipo de parámetro de excepción. Cuando ocurre una

coincidencia, se ejecuta el código contenido dentro del manejador catch que coincide.

Cuando un manejador catch termina su procesamiento, el parámetro de catch y las variables locales

definidas dentro del manejador quedan fuera de alcance, cualquier manejador catch restante que

corresponda al bloque try se ignora, y la ejecución se reanuda en la primera línea del código

después de la secuencia try…catch.

Si no ocurren excepciones en un bloque try, el programa ignora el manejador catch para ese bloque.

La ejecución del programa se reanuda con la siguiente instrucción después de la secuencia try…

catch.

Si una excepción que ocurre en un bloque try no tiene un manejador catch que coincida, o si ocurre

una excepción en una instrucción que no esté en un bloque try, la función que contiene la

instrucción termina de inmediato y el programa trata de 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, use la palabra clave throw seguida de un operando que representa el

tipo de excepción a lanzar, el operando de una instrucción throw puede ser de cualquier tipo.

Page 9: Clase string y manejo de excepciones

Cuando utilizar el manejo de excepciones.

El manejo de excepciones es para errores sincrónicos, que ocurren cuando se ejecuta una

instrucción, no está diseñado para procesar los errores asociados con los eventos asíncronos, que

ocurren en el paralelo con el flujo de control del programa.

Volver a lanzar una excepción.

El manejador de excepciones puede diferri el manejo de una excepción a otro manejador de

excepciones. En cualquier caso, para lograr esto el manejador vuelve a lanzar la excepción. Algunos

ejemplos comunes de excepciones son los subíndices de arreglos fuera de rango, el desbordamiento

aritmético, la división entre cero, los parámetros inválidos de funciones y las asignaciones de

memoria fallidas.

Page 10: Clase string y manejo de excepciones

Especificación de excepciones:

Una especificación de excepciones opcional enumera una lista de excepciones que una función

puede lanzar. Una función solo puede lanzar excepciones de los tipos indicados por las

especificaciones, o excepciones de cualquier tipo que se derive de estos tipos. Si una función lanza

una excepción que no pertenezca a uno de los tipos especificados, se hace una llamada a la función

unexpected y el programa termina.

Una función sin especificación de excepciones puede lanzar cualquier excepción. La especificación

de excepciones vacía throw () indica que una función no lanza excepciones. Si una función con una

especificación de excepciones vacía intenta lanzar la excepción, se invoca la función unexpected.

Procesamiento de las excepciones inesperadas:

La función unexpected llama a la función registrada con la función set_terminate. Si no se ha

registrado ninguna función de esta forma, se hace una llamada a la función terminate de manera

predeterminada. La función set_terminate puede especificar la función a invocar cuando se hace la

llamada terminate. En caso contrario, terminate llama a abort, la cual termina el programa sin

llamar a los destructores de los objetos declarados como static y auto.

Las funciones set_terminate y set_unexpected devuelven un apuntador a la última función llamada

por terminate y unexpected, respectivamente, esto permite al programador guardar el apuntador de

Page 11: Clase string y manejo de excepciones

funciones, para poder restaurarlo más tarde, estas funciones reciben como argumentos apuntadores

a funciones con tipos de valores de retorno void y sin argumentos.

Si una función de terminación definida por el programador no sale de un programa, se hará una

llamada a la unción abort después de que la función de terminación definida por el programador

termine de ejecutarse.

Limpieza de pila:

Limpiar la pila de llamadas funciones significa que la función en la que la excepción no se atrapó

termina, todas las variables locales en esa 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 esta 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

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.

Page 12: Clase string y manejo de excepciones

Procesamiento de las fallas de new

Cuando falla el operador new, lanza una excepción bad_alloc, definida en el archivo de encabezado

<new>.

Ejemplos de fallas new:

Caso en el que new devuelve 0 al fallar:

Caso en el que new lanza bad_alloc al fallar:

Manejo de las fallas de new mediante 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, este aounta a la función que se llamará si new falla.

Page 13: Clase string y manejo de excepciones

Una vez que set_new_handler registra un manejador new en el programa, el operador no lanza

bad_alloc en el futuro; en vez de ello, difiere el manejo de errores a la función manejadoras de

new.

Si new asigna memoria con éxito, devuelve un apuntador a esa memoria, si falla y no se registro

ninguna función manejador a de new, new lanza una excepción bad_allo, si new falla al asignar

memoria y se ha registrado una función manejadora de new, se hace una llamada a esta función. La

función debe realizar 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 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.

Jerarquía de excepciones de la Biblioteca estándar.

Page 14: Clase string y manejo de excepciones

Referencias y bibliografía

Como programar en C++

Harvey m. Deitel, Paul J. Deitel

Pearson Educación, 1995-927 pages