PDF de programación - Pensar en C++ (Volumen 2)

Imágen de pdf Pensar en C++ (Volumen 2)

Pensar en C++ (Volumen 2)gráfica de visualizaciones

Actualizado el 22 de Febrero del 2018 (Publicado el 31 de Agosto del 2017)
7.936 visualizaciones desde el 31 de Agosto del 2017
2,9 MB
358 paginas
Creado hace 12a (12/01/2012)
i

i

“Volumen2” — 2012/1/12 — 13:53 — page I — #1

i

i

Pensar en C++ (Volumen 2)

Traducción (INACABADA) del libro Thinking in C++, Volumen 2

Bruce Eckel

12 de enero de 2012

Puede encontrar la versión actualizada de este libro e información adicional sobre el proyecto de traducción en

http://arco.esi.uclm.es/~david.villa/pensarC++.html

i

i

i

i

i

i

“Volumen2” — 2012/1/12 — 13:53 — page II — #2

i

i

Pensar en C++ (Volumen 2)
by Bruce Eckel

Copyright © 2004 Bruce Eckel

II

i

i

i

i

i

i

“Volumen2” — 2012/1/12 — 13:53 — page III — #3

i

i

Índice general

1. Introducción

.
.
.

.
.
.

.
.
.

.
.
.

. .
. .
. .

1.3.1. Soluciones de los ejercicios

1.1. Objetivos .
1.2. Capítulos .
1.3. Ejercicios .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.4. Código fuente .
1.5. Compiladores .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.6. Estándares del lenguaje . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.7. Seminarios, CD-ROMs y consultoría . . . . . . . . . . . . . . . . . . . .
. .
1.8. Errores .
.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.9. Sobre la portada .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.
1.10. Agradecimientos

.
.

.

.

.

.

I Construcción de Sistemas estables

1
1
2
3
4
4
4
5
5
6
6
6

9

2. Tratamiento de excepciones

. . .

. . . . . . .

13
2.1. Tratamiento tradicional de errores
. . . . . . . . . . . . . . . . . . . . . 13
2.2. Lanzar una excepción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.3. Capturar una excepción . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.3.1. El bloque try . . . .
. . . . . . . . . . . . . . . 15
2.3.2. Manejadores de excepción . . . . . . . . . . . . . . . . . . . . . . 16
2.3.3.
. . . . . . . . . . . . . . . . . . . . . . . . . 16
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
.
2.4.1. Capturar cualquier excepción . . . . . . . . . . . . . . . . . . . . 17
2.4.2. Relanzar una excepción . . . . . . . . . . . . . . . . . . . . . . . 18
2.4.3. Excepciones no capturadas . . . . . . . . . . . . . . . . . . . . . 18
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.5.1. Gestión de recursos . . . . . . . . . . . . . . . . . . . . . . . . . . 19
. . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.5.2.

2.5. Limpieza .

. . .
.

. . . .

. . .

2.4.

. .

.
.

.
.

.
.

.
.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.
.

.
.

i

i

III

i

i

i

i

Índice general

“Volumen2” — 2012/1/12 — 13:53 — page IV — #4

i

i

.

.

.

.

.

. . .

. . . . . .

¿Mejores especificaciones de excepciones?

2.5.3. auto_ptr .
2.5.4. Bloques try a nivel de función . . .

. . . . . . . . . . . . . . . . . 22
. . . . . . . . . . . . . . . . 22
2.6. Excepciones estándar .
. . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.7. Especificaciones de excepciones . . . . . . . . . . . . . . . . . . . . . . . 24
. . . . . . . . . . . . 25
2.7.1.
2.7.2. Especificación de excepciones y herencia . . . . . . . . . . . . . 26
2.7.3. Cuándo no usar especificaciones de excepción . . . . . . . . . . 26
2.8. Seguridad de la excepción . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.9. Programar con excepciones . . . . . . . . . . . . . . . . . . . . . . . . . 28
2.9.1. Cuándo evitar las excepciones
. . . . . . . . . . . . . . . . . . . 28
2.9.2. Usos típicos de excepciones . . . . . . . . . . . . . . . . . . . . . 28
. . . . . . . . . . . . . . . . . . . . . . . . . . . 28
. . . . . . . . . . . . . . . . . . . . . . . . . . . 29
. . . . . . . . . . . . . . . . . . . . . . . . . . . 29

2.10. Sobrecarga .
.
2.11. Resumen .
2.12. Ejercicios .
.

.
.
.

.
.
.

.
.
.

.
.
.

.
.
.

.
.
.

.
.
.

.

.

.

.

.

.

3. Programación defensiva
.

31
. . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.1. Aserciones .
3.2. Un framework de pruebas unitarias sencillo . . . . . . . . . . . . . . . 35
3.2.1. Pruebas automatizadas . . . . . . . . . . . . . . . . . . . . . . . 37
3.2.2. El Framework TestSuite . . . . . . . . . . . . . . . . . . . . . . . 39
3.2.3. Suites de test
. . . . . . . . . . . . . . . . . . . . . . . . . . 42
3.2.4. El código del framework de prueba . . . . . . . . . . . . . . . . 43
3.3. Técnicas de depuración . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
3.3.1. Macros de seguimiento . . . . . . . . . . . . . . . . . . . . . . . 48
. . . . . . . . . . . . . . . . . . . . . . . . . . 49
3.3.2. Fichero de rastro .
3.3.3. Encontrar agujeros en memoria
. . . . . . . . . . . . . . . . . . 50
. . . . . . . . . . . . . . . . . . . . . . . . . . . 55
. . . . . . . . . . . . . . . . . . . . . . . . . . . 55

3.4. Resumen .
3.5. Ejercicios .

.
.

.
.

.
.

.
.

.
.

.
.

.
.

.
.

.

.

.

II La librería Estándar de C++

57

4. Las cadenas a fondo

.

. . .

. . . . . .

61
4.1. ¿Qué es un string? .
. . . . . . . . . . . . . . . . . . 61
4.2. Operaciones con cadenas . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
4.2.1. Añadiendo, insertando y concatenando cadenas . . . . . . . . . 63
4.2.2. Reemplazar caracteres en cadenas . . . . . . . . . . . . . . . . . 65
4.2.3. Concatenación usando operadores no-miembro sobrecargados
68
. . . . . . . . . . . . . . . . . . . . . . . . . . . 69

4.3. Buscar en cadenas .

.

.

.

IV

i

i

i

i

i

i

“Volumen2” — 2012/1/12 — 13:53 — page V — #5

i

i

Índice general

4.3.1. Busqueda inversa .
. . . . . . . . . . . . . . . . . . . . . . . . . . 73
4.3.2. Encontrar el primero/último de un conjunto de caracteres . . . 74
4.3.3. Borrar caracteres de cadenas
. . . . . . . . . . . . . . . . . . . . 76
4.3.4. Comparar cadenas . . . . . . . . . . . . . . . . . . . . . . . . . . 78
4.3.5. Cadenas y rasgos de caracteres . . . . . . . . . . . . . . . . . . . 82
4.4. Una aplicación con cadenas . . . . . . . . . . . . . . . . . . . . . . . . . 86
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
4.5. Resumen .
4.6. Ejercicios .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91

. .
. .

.
.

.
.

.
.

.
.

5. Iostreams

5.4.

. . . . .

. . . . .

. . .

. . .

. . .

. . . . .

. . .

. . . . .

. . . . .

. . . . . .

5.3. Manejo errores de stream . . . . .

Leyendo bytes sin formato
. . . . .

5.1. ¿Por que iostream? . . .
5.2. Iostreams al rescate

5.2.3.1. Versiones sobrecargadas de get() . . . . .
5.2.3.2.

95
. . . . . . . . . . . . . . . 95
. . . . . . . . . . . . . . . . . . . . . . 99
Insertadores y extractores . . . . . . . . . . . . . . . . . . . . . . 99
5.2.1.
. . . . . . . . . . . . . . . . . . . . . . . . . 102
5.2.2. Uso común . .
5.2.3. Entrada orientada a líneas . . . . . . . . . . . . . . . . . . . . . . 104
. 105
. . . . . . . . . . . . . . . 105
. . . . . . . . 105
5.3.1. Estados del stream . . . . .
. . . . . . . 105
5.3.2. Streams y excepciones . . . . . . . . . . . . . . . . . . . . . . . . 107
Iostreams de fichero . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
5.4.1. Un ejemplo de procesado de fichero. . . . . . . . . . . . . . . . . 108
5.4.2. Modos de apertura . . . . . . . . . . . . . . . . . . . . . . . . . . 109
. . . . . 110
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
Iostreams de string . . . . .
. . . . . . . . . . . 115
5.7.1. Streams de cadena de entrada . . . . . . . . . . . . . . . . . . . . 115
5.7.2. Streams de cadena de salida . . . . . . . . . . . . . . . . . . . . . 117
5.8. Formateo de stream de salida . . . . . . . . . . . . . . . . . . . . . . . . 119
5.8.1. Banderas de formateo . . . . . . . . . . . . . . . . . . . . . . . . 120
5.8.2. Campos de formateo . . . . . . . . . . . . . . . . . . . . . . . . . 121
5.8.3. Anchura, relleno y precisión . . . . . . . . . . . . . . . . . . . . 122
5.8.4. Un ejemplo exhaustivo . . . . . . . . . . . . . . . . . . . . . . . . 123
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
. . . . . . . . . . . . . . . . . . 127
. . . . . . . . . . . . . . . . . . . . . . . . . . . 129
. . . . . . . . . . . . . . . . . . . . . . . . . . . 130
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131

5.9.1. Manipuladores con argumentos
5.9.2.
5.9.3.
.

5.5. Almacenamiento de iostream . . . . .
5.6. Buscar en iostreams .
5.7.

. . . . .

5.9. Manipuladores

. . .
. . .

. . . . .

. . . . .

. . . . .

. . .

.
.
. .

5.10.

.

.

.

.
.
.

.
.
.

.
.
.

.
.
.

.

.
.
.

.
.
.

. . .

. . .

i

i

V

i

i

i

i

Índice general

.

.

5.10.1.
5.10.2.
5.10.3.
.
5.11.1.
5.11.2.
.
.

.
.

.
.

5.11.

5.12.
5.13.

“Volumen2” — 2012/1/12 — 13:53 — page VI — #6

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

. . . . . . . . . . . . . . . . . . . . . . . . . . . 131
. . . . . . . . . . . . . . . . . . . . . . . . . . . 133
. . . . . . . . . . . . . . . . . . . . . . . . . . . 135
. . . . . . . . . . . . . . . . . . . . . . . . . . . 138
. . . . . . . . . . . . . . . . . . . . . . . . . . . 138
. . . . . . . . . . . . . . . . . . . . . . . . . . . 138
. . . . . . . . . . . . . . . . . . . . . . . . . . . 139
. . . . . . . . . . . . . . . . . . . . . . . . . . . 139

.

.
.

6.2.

.
.
.
.
.

.
.
.
.
.

6.1.

.

.

.

.
.
.
.
.

.

.

.

.
.
.
.
.

.
6.1.1.
6.1.2.
6.1.3.
6.1.4.

6. Las plantillas en profundidad
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
6.1.4.1.
6.1.4.2.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

6.1.5.
6.1.6.
.
6.2.1.
6.2.2.
6.2.3.
6.2.4.
6.2.5.
.
6.3.1.
6.3.2.
6.3.3.
6.3.4.
.
6.4.1.
6.4.2.
.
6.5.1.
6.5.2.
6.5.3.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
  • Links de descarga
http://lwp-l.com/pdf6681

Comentarios de: Pensar en C++ (Volumen 2) (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad