Está en la página 1de 14

Pensar en C++ (Volumen 1)

Traduccin (cuasi-terminada) del libro Thinking in C++, Volumen 1


Bruce Eckel
12 de enero de 2012
Puede encontrar la versin actualizada de este libro e informacin adicional sobre el proyecto de
traduccin en
http://arco.esi.uclm.es/~david.villa/pensarC++.html
i
i
Volumen1 2012/1/12 13:52 page II #2
i
i
i
i
i
i
Pensar en C++ (Volumen 1)
by Bruce Eckel
Copyright 2000 Bruce Eckel
II
i
i
Volumen1 2012/1/12 13:52 page III #3
i
i
i

i
i
i
ndice general
1. Introduccin a los Objetos 1
1.1. El progreso de abstraccin . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2. Cada objeto tiene una interfaz . . . . . . . . . . . . . . . . . . . . . . . . 3
1.3. La implementacin oculta . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.4. Reutilizar la implementacin . . . . . . . . . . . . . . . . . . . . . . . . 6
1.5. Herencia: reutilizacin de interfaces . . . . . . . . . . . . . . . . . . . . 7
1.5.1. Relaciones es-un vs. es-como-un . . . . . . . . . . . . . . . . . 10
1.6. Objetos intercambiables gracias al polimorfismo . . . . . . . . . . . . . 11
1.7. Creacin y destruccin de objetos . . . . . . . . . . . . . . . . . . . . . . 15
1.8. Gestin de excepciones: tratamiento de errores . . . . . . . . . . . . . . 16
1.9. Anlisis y diseo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.9.1. Fase 0: Hacer un plan . . . . . . . . . . . . . . . . . . . . . . . . 18
1.9.1.1. Declaracin de objetivos . . . . . . . . . . . . . . . . . 19
1.9.2. Fase 1: Qu estamos haciendo? . . . . . . . . . . . . . . . . . . 19
1.9.3. Fase 2: Cmo podemos construirlo? . . . . . . . . . . . . . . . 22
1.9.3.1. Las cinco etapas del diseo de objetos . . . . . . . . . 23
1.9.3.2. Directrices para desarrollo de objetos . . . . . . . . . . 24
1.9.4. Fase 3: Construir el ncleo . . . . . . . . . . . . . . . . . . . . . 25
1.9.5. Fase 4: Iterar los casos de uso . . . . . . . . . . . . . . . . . . . . 25
1.9.6. Fase 5: Evolucin . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
1.9.7. Los planes valen la pena . . . . . . . . . . . . . . . . . . . . . . . 27
1.10. Programacin Extrema . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

1.10.1. Escriba primero las pruebas . . . . . . . . . . . . . . . . . . . . . 28


1.10.2. Programacin en parejas . . . . . . . . . . . . . . . . . . . . . . . 29
1.11. Porqu triunfa C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
1.11.1. Un C mejor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
1.11.2. Usted ya est en la curva de aprendizaje . . . . . . . . . . . . . 30
1.11.3. Eficiencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
1.11.4. Los sistemas son ms fciles de expresar y entender . . . . . . . 31
III
i
i
Volumen1 2012/1/12 13:52 page IV #4
i
i
i
i
i
i
ndice general
1.11.5. Aprovechamiento mximo con libreras . . . . . . . . . . . . . . 31
1.11.6. Reutilizacin de cdigo fuente con plantillas . . . . . . . . . . . 32
1.11.7. Manejo de errores . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
1.11.8. Programar a lo grande . . . . . . . . . . . . . . . . . . . . . . . . 32
1.12. Estrategias de transicin . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
1.12.1. Directrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
1.12.1.1. Entrenamiento . . . . . . . . . . . . . . . . . . . . . . . 33
1.12.1.2. Proyectos de bajo riesgo . . . . . . . . . . . . . . . . . 33

1.12.1.3. Modelar desde el xito . . . . . . . . . . . . . . . . . . 33


1.12.1.4. Use libreras de clases existentes . . . . . . . . . . . . . 34
1.12.1.5. No reescriba en C++ cdigo que ya existe . . . . . . . 34
1.12.2. Obstculos de la gestin . . . . . . . . . . . . . . . . . . . . . . . 34
1.12.2.1. Costes iniciales . . . . . . . . . . . . . . . . . . . . . . . 34
1.12.2.2. Cuestiones de rendimiento . . . . . . . . . . . . . . . . 35
1.12.2.3. Errores comunes de diseo . . . . . . . . . . . . . . . . 35
1.13. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
2. Construir y usar objetos 37
2.1. El proceso de traduccin del lenguaje . . . . . . . . . . . . . . . . . . . 37
2.1.1. Intrpretes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
2.1.2. Compiladores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
2.1.3. El proceso de compilacin . . . . . . . . . . . . . . . . . . . . . . 39
2.1.3.1. Comprobacin esttica de tipos . . . . . . . . . . . . . 40
2.2. Herramientas para compilacin modular . . . . . . . . . . . . . . . . . 40
2.2.1. Declaraciones vs definiciones . . . . . . . . . . . . . . . . . . . . 41
2.2.1.1. Sintaxis de declaracin de funciones . . . . . . . . . . 41
2.2.1.2. Una puntualizacin . . . . . . . . . . . . . . . . . . . . 42
2.2.1.3. Definicin de funciones . . . . . . . . . . . . . . . . . . 42
2.2.1.4. Sintaxis de declaracin de variables . . . . . . . . . . . 42
2.2.1.5. Incluir ficheros de cabecera . . . . . . . . . . . . . . . . 43
2.2.1.6. Formato de inclusin del estndar C++ . . . . . . . . . 44
2.2.2. Enlazado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
2.2.3. Uso de libreras . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
2.2.3.1. Cmo busca el enlazador una librera . . . . . . . . . . 46
2.2.3.2. Aadidos ocultos . . . . . . . . . . . . . . . . . . . . . 46

2.2.3.3. Uso de libreras C plano . . . . . . . . . . . . . . . . . 47


2.3. Su primer programa en C++ . . . . . . . . . . . . . . . . . . . . . . . . . 47
2.3.1. Uso de las clases iostream . . . . . . . . . . . . . . . . . . . . . 47
IV
i
i
Volumen1 2012/1/12 13:52 page V #5
i
i
i
i
i
i
ndice general
2.3.2. Espacios de nombres . . . . . . . . . . . . . . . . . . . . . . . . . 48
2.3.3. Fundamentos de la estructura de los programa . . . . . . . . . . 49
2.3.4. Hello,World! . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
2.3.5. Utilizar el compilador . . . . . . . . . . . . . . . . . . . . . . . . 51
2.4. Ms sobre iostreams . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
2.4.1. Concatenar vectores de caracteres . . . . . . . . . . . . . . . . . 51
2.4.2. Leer de la entrada . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
2.4.3. Llamar a otros programas . . . . . . . . . . . . . . . . . . . . . . 53
2.5. Introducin a las cadenas . . . . . . . . . . . . . . . . . . . . . . . . . . 53
2.6. Lectura y escritura de ficheros . . . . . . . . . . . . . . . . . . . . . . . . 54
2.7. Introduccin a los vectores . . . . . . . . . . . . . . . . . . . . . . . . . . 56
2.8. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59

2.9. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
3. C en C++ 63
3.1. Creacin de funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
3.1.1. Valores de retorno de las funciones . . . . . . . . . . . . . . . . . 65
3.1.2. Uso de funciones de libreras C . . . . . . . . . . . . . . . . . . . 66
3.1.3. Creacin de libreras propias . . . . . . . . . . . . . . . . . . . . 66
3.2. Control de flujo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
3.2.1. Verdadero y falso . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
3.2.2. if-else . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
3.2.3. while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
3.2.4. do-while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
3.2.5. for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
3.2.6. Las palabras reservadas break y continue . . . . . . . . . . . 70
3.2.7. switch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
3.2.8. Uso y maluso de goto . . . . . . . . . . . . . . . . . . . . . . . . 73
3.2.9. Recursividad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
3.3. Introduccin a los operadores . . . . . . . . . . . . . . . . . . . . . . . . 74
3.3.1. Precedencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
3.3.2. Auto incremento y decremento . . . . . . . . . . . . . . . . . . . 75
3.4. Introduccin a los tipos de datos . . . . . . . . . . . . . . . . . . . . . . 76
3.4.1. Tipos predefinidos bsicos . . . . . . . . . . . . . . . . . . . . . . 76
3.4.2. booleano, verdadero y falso . . . . . . . . . . . . . . . . . . . . . 77
3.4.3. Especificadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
3.4.4. Introduccin a punteros . . . . . . . . . . . . . . . . . . . . . . . 79
3.4.5. Modificar objetos externos . . . . . . . . . . . . . . . . . . . . . . 82
V

i
i
Volumen1 2012/1/12 13:52 page VI #6
i
i
i
i
i
i
ndice general
3.4.6. Introduccin a las referencias de C++ . . . . . . . . . . . . . . . 84
3.4.7. Punteros y Referencias como modificadores . . . . . . . . . . . 85
3.5. Alcance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
3.5.1. Definicin de variables al vuelo . . . . . . . . . . . . . . . . . 87
3.6. Especificar la ubicacin del espacio de almacenamiento . . . . . . . . . 89
3.6.1. Variables globales . . . . . . . . . . . . . . . . . . . . . . . . . . 89
3.6.2. Variables locales . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
3.6.2.1. Variables registro . . . . . . . . . . . . . . . . . . . . . 90
3.6.3. Static . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
3.6.4. extern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
3.6.4.1. Enlazado . . . . . . . . . . . . . . . . . . . . . . . . . . 93
3.6.5. Constantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
3.6.5.1. Valores constantes . . . . . . . . . . . . . . . . . . . . . 94
3.6.6. Volatile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
3.7. Los operadores y su uso . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
3.7.1. Asignacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95

3.7.2. Operadores matemticos . . . . . . . . . . . . . . . . . . . . . . 96


3.7.2.1. Introduccin a las macros del preprocesador . . . . . . 97
3.7.3. Operadores relacionales . . . . . . . . . . . . . . . . . . . . . . . 97
3.7.4. Operadores lgicos . . . . . . . . . . . . . . . . . . . . . . . . . . 97
3.7.5. Operadores para bits . . . . . . . . . . . . . . . . . . . . . . . . . 98
3.7.6. Operadores de desplazamiento . . . . . . . . . . . . . . . . . . . 98
3.7.7. Operadores unarios . . . . . . . . . . . . . . . . . . . . . . . . . 101
3.7.8. El operador ternario . . . . . . . . . . . . . . . . . . . . . . . . . 102
3.7.9. El operador coma . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
3.7.10. Trampas habituales cuando se usan operadores . . . . . . . . . 103
3.7.11. Operadores de moldeado . . . . . . . . . . . . . . . . . . . . . . 103
3.7.12. Los moldes explcitos de C++ . . . . . . . . . . . . . . . . . . . . 104
3.7.12.1. static_cast . . . . . . . . . . . . . . . . . . . . . . . 105
3.7.12.2. const_cast . . . . . . . . . . . . . . . . . . . . . . . . 106
3.7.12.3. reinterpret_cast . . . . . . . . . . . . . . . . . . . 107
3.7.13. sizeof - un operador en si mismo . . . . . . . . . . . . . . . . . 108
3.7.14. La palabra reservada asm . . . . . . . . . . . . . . . . . . . . . . 108
3.7.15. Operadores explcitos . . . . . . . . . . . . . . . . . . . . . . . . 109
3.8. Creacin de tipos compuestos . . . . . . . . . . . . . . . . . . . . . . . . 109
3.8.1. Creacin de alias usando typedef . . . . . . . . . . . . . . . . . 109
3.8.2. Usar struct para combinar variables . . . . . . . . . . . . . . 110
3.8.2.1. Punteros y estructuras . . . . . . . . . . . . . . . . . . 112
VI
i
i
Volumen1 2012/1/12 13:52 page VII #7

i
i
i
i
i
i
ndice general
3.8.3. Programas ms claros gracias a enum . . . . . . . . . . . . . . . 112
3.8.3.1. Comprobacin de tipos para enumerados . . . . . . . 114
3.8.4. Cmo ahorrar memoria con union . . . . . . . . . . . . . . . . 114
3.8.5. Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
3.8.5.1. Punteros y arrays . . . . . . . . . . . . . . . . . . . . . 117
3.8.5.2. El formato de punto flotante . . . . . . . . . . . . . . . 120
3.8.5.3. Aritmtica de punteros . . . . . . . . . . . . . . . . . . 121
3.9. Consejos para depuracin . . . . . . . . . . . . . . . . . . . . . . . . . . 124
3.9.1. Banderas para depuracin . . . . . . . . . . . . . . . . . . . . . . 124
3.9.1.1. Banderas de depuracin para el preprocesador . . . . 124
3.9.1.2. Banderas para depuracin en tiempo de ejecucin . . 124
3.9.2. Convertir variables y expresiones en cadenas . . . . . . . . . . . 126
3.9.3. La macro C assert() . . . . . . . . . . . . . . . . . . . . . . . . . . 126
3.10. Direcciones de funcin . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
3.10.1. Definicin de un puntero a funcin . . . . . . . . . . . . . . . . 127
3.10.2. Declaraciones y definiciones complicadas . . . . . . . . . . . . . 128
3.10.3. Uso de un puntero a funcin . . . . . . . . . . . . . . . . . . . . 129
3.10.4. Arrays de punteros a funciones . . . . . . . . . . . . . . . . . . . 129
3.11. Make: cmo hacer compilacin separada . . . . . . . . . . . . . . . . . 130

3.11.1. Las actividades de Make . . . . . . . . . . . . . . . . . . . . . . . 131


3.11.1.1. Macros . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
3.11.1.2. Reglas de sufijo . . . . . . . . . . . . . . . . . . . . . . 132
3.11.1.3. Objetivos predeterminados . . . . . . . . . . . . . . . . 133
3.11.2. Los Makefiles de este libro . . . . . . . . . . . . . . . . . . . . . . 134
3.11.3. Un ejemplo de Makefile . . . . . . . . . . . . . . . . . . . . . . . 134
3.12. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
3.13. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
4. Abstraccin de Datos 141
4.1. Una librera pequea al estilo C . . . . . . . . . . . . . . . . . . . . . . . 142
4.1.1. Asignacin dinmica de memoria . . . . . . . . . . . . . . . . . 145
4.1.2. Malas suposiciones . . . . . . . . . . . . . . . . . . . . . . . . . . 148
4.2. Qu tiene de malo? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
4.3. El objeto bsico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
4.4. Qu es un objeto? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
4.5. Tipos abstractos de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
4.6. Detalles del objeto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
4.7. Conveciones para los ficheros de cabecera . . . . . . . . . . . . . . . . . 158
VII
i
i
Volumen1 2012/1/12 13:52 page VIII #8
i
i
i
i

i
i
ndice general
4.7.1. Importancia de los ficheros de cabecera . . . . . . . . . . . . . . 158
4.7.2. El problema de la declaracin mltiple . . . . . . . . . . . . . . 160
4.7.3. Las directivas del preprocesador #define, #ifndef y #endif . . . 160
4.7.4. Un estndar para los ficheros de cabecera . . . . . . . . . . . . . 161
4.7.5. Espacios de nombres en los ficheros de cabecera . . . . . . . . . 162
4.7.6. Uso de los ficheros de cabecera en proyectos . . . . . . . . . . . 162
4.8. Estructuras anidadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
4.8.1. Resolucin de mbito global . . . . . . . . . . . . . . . . . . . . 166
4.9. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
4.10. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
5. Ocultar la implementacin 171
5.1. Establecer los lmites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
5.2. Control de acceso en C++ . . . . . . . . . . . . . . . . . . . . . . . . . . 172
5.2.1. protected . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
5.3. Amigos (friends) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
5.3.1. Amigas anidadas . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
5.3.2. Es eso puro? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
5.4. Capa de objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
5.5. La clase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
5.5.1. Modificaciones en Stash para usar control de acceso . . . . . . 181
5.5.2. Modificar Stack para usar control de acceso . . . . . . . . . . . 181
5.6. Manejo de clases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
5.6.1. Ocultar la implementacin . . . . . . . . . . . . . . . . . . . . . 182

5.6.2. Reducir la recompilacin . . . . . . . . . . . . . . . . . . . . . . 183


5.7. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
5.8. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
6. Inicializacin y limpieza 187
6.1. Inicializacin garantizada por el constructor . . . . . . . . . . . . . . . 188
6.2. Limpieza garantizada por el destructor . . . . . . . . . . . . . . . . . . 189
6.3. Eliminacin del bloque de definiciones . . . . . . . . . . . . . . . . . . . 191
6.3.1. Bucles for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
6.3.2. Alojamiento de memoria . . . . . . . . . . . . . . . . . . . . . . 193
6.4. Stash con constructores y destructores . . . . . . . . . . . . . . . . . . . 194
6.5. Stack con constructores y destructores . . . . . . . . . . . . . . . . . . . 197
6.6. Inicializacin de tipos agregados . . . . . . . . . . . . . . . . . . . . . . 199
6.7. Constructores por defecto . . . . . . . . . . . . . . . . . . . . . . . . . . 201
6.8. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
VIII
i
i
Volumen1 2012/1/12 13:52 page IX #9
i
i
i
i
i
i
ndice general
6.9. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203

7. Sobrecarga de funciones y argumentos por defecto 205


7.1. Ms decoracin de nombres . . . . . . . . . . . . . . . . . . . . . . . . . 206
7.1.1. Sobrecarga en el valor de retorno . . . . . . . . . . . . . . . . . . 207
7.1.2. Enlace con FIXME:tipos seguros . . . . . . . . . . . . . . . . . . 207
7.2. Ejemplo de sobrecarga . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208
7.3. Uniones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211
7.4. Argumentos por defecto . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
7.4.1. Argumentos de relleno . . . . . . . . . . . . . . . . . . . . . . . . 214
7.5. Eleccin entre sobrecarga y argumentos por defecto . . . . . . . . . . . 215
7.6. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
7.7. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220
8. Constantes 223
8.1. Sustitucin de valores . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
8.1.1. const en archivos de cabecera . . . . . . . . . . . . . . . . . . . 224
8.1.2. constantes seguras . . . . . . . . . . . . . . . . . . . . . . . . . . 225
8.1.3. Vectores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
8.1.4. Diferencias con C . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
8.2. Punteros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
8.2.1. Puntero a constante . . . . . . . . . . . . . . . . . . . . . . . . . . 228
8.2.2. Puntero constante . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
8.2.2.1. Formato . . . . . . . . . . . . . . . . . . . . . . . . . . . 229
8.2.3. Asignacin y comprobacin de tipos . . . . . . . . . . . . . . . . 229
8.2.3.1. Literales de cadena . . . . . . . . . . . . . . . . . . . . 230
8.3. Argumentos de funciones y valores de retorno . . . . . . . . . . . . . . 230
8.3.1. Paso por valor constante . . . . . . . . . . . . . . . . . . . . . . . 231
8.3.2. Retorno por valor constante . . . . . . . . . . . . . . . . . . . . . 231

8.3.2.1. Temporarios . . . . . . . . . . . . . . . . . . . . . . . . 233


8.3.3. Paso y retorno de direcciones . . . . . . . . . . . . . . . . . . . . 234
8.3.3.1. Criterio de paso de argumentos . . . . . . . . . . . . . 235
8.4. Clases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236
8.4.1. const en las clases . . . . . . . . . . . . . . . . . . . . . . . . . . 237
8.4.1.1. La lista de inicializacin del constructor. . . . . . . . . 237
8.4.1.2. Constructores para los tipos del lenguaje . . . . . . . . 238
8.4.2. Constantes en tiempo de compilacin dentro de clases . . . . . 239
8.4.2.1. El enumerado en codigo antiguo . . . . . . . . . . . . 240
8.4.3. Objetos y mtodos constantes . . . . . . . . . . . . . . . . . . . . 241
IX