Tabla de contenido Prefacio 6 Capítulo 1 Estructura de archivos 11 1.1 Declaración de derechos de autor y versión 11 1.2 Estructura del archivo de encabezado 12 1.3 Estructura del archivo de definición 13 1.4 El papel de los archivos de encabezado 13 1.5 Estructura del directorio 14 Capítulo 2 Diseño del programa 15 2.1 Línea en blanco 15 2.2 Línea de código 16 2.3 Espacios dentro de líneas de código17 2.4 Alineación18 2.5 División de líneas largas 19 2.6 Posición de los modificadores 19 2.7 Nota 20 2.8 Diseño de clase 21 Capítulo 3 Reglas de nomenclatura 22 3.1 Reglas comunes 22 3.2 Reglas simples de nomenclatura de aplicaciones WINDOWS 23 3.3 Reglas simples de nomenclatura de aplicaciones UNIX 25 Capítulo 4 Expresiones y declaraciones básicas 26 4.1 Prioridad del operador 26 4.2 Expresiones compuestas 27 4.3 Declaración SI 27 4.4 Eficiencia de las declaraciones de bucle 29 4.5 Variables de control de bucle de la sentencia FOR 30 4.6 Declaración de INTERRUPCIÓN 30 4.7 Declaración GOTO 31 Capítulo 5 Constantes 33 5.1 Por qué se necesitan constantes 33 5.2 CONST frente a #DEFINE 33 5.3 Reglas para definir constantes 33 5.4 Constantes en clases 34 Capítulo 6 Diseño de funciones 36 6.1 Reglas para los parámetros 36 6.2 Reglas para valores de retorno 37 6.3 Reglas para la implementación interna de funciones 39 6.4 Otras sugerencias 40 6.5 Uso de afirmaciones 41 6.6 Comparación de referencias y sugerencias 42 Capítulo 7 Gestión de la memoria 44 7.1 Método de asignación de memoria 44 7.2 Errores de memoria comunes y sus contramedidas 44 7.3 Comparación de punteros y matrices 45 7.4 ¿Cómo transfieren memoria los parámetros del puntero? 47 7.5 ¿Qué pasa con los punteros con FREE y DELETE? 50 7.6 ¿Se liberará la memoria dinámica automáticamente? 50 7.7 Eliminar los “punteros salvajes” 51 7.8 ¿Por qué necesitamos NUEVO/ELIMINAR cuando tenemos MALLOC/FREE? 52 7.9 ¿Qué debo hacer si la memoria se agota? 53 7.10 Puntos claves para usar MALLOC/FREE 54 7.11 Puntos clave para usar NUEVO/ELIMINAR 55 7.12 Algunas ideas 56 Capítulo 8 Funciones avanzadas de las funciones de C++ 57 8.1 El concepto de sobrecarga de funciones 57 8.2 Sobrecarga, anulación y ocultación de funciones miembro 60 8.3 Valores predeterminados de los parámetros 63 8.4 Sobrecarga del operador 64 8.5 Función en línea 65 8.6 Algunas ideas 68 Capítulo 9 Constructores, destructores y funciones de asignación de clases 69 9.1 El origen de los constructores y destructores 69 9.2 Tabla de inicialización del constructor 70 9.3 Orden de construcción y destrucción 72 9.4 Ejemplo: Constructor y destructor de clase STRING 72 9.5 No subestimes los constructores de copias y las funciones de asignación 73 9.6 Ejemplo: constructor de copia y función de asignación de la clase STRING 73 9.7 La forma perezosa de lidiar con constructores de copias y funciones de asignación 75 9.8 Cómo implementar las funciones básicas de una clase en una clase derivada 75 9.9 Algunas ideas 77 Capítulo 10 Herencia y composición de clases 78 10.1 Herencia 78 10.2 Combinación 80 Capítulo 11 Otras experiencias de programación 82 11.1 Uso de CONST para mejorar la robustez de la función 82 11.2 Mejorar la eficiencia del programa 84 11.3 Algunas sugerencias útiles 85 Referencia 87 Apéndice A: Formulario de revisión de código C++/C 88 Apéndice B: Preguntas del examen C++/C 93 Apéndice C: Respuestas y criterios de puntuación para las preguntas del examen C++/C 97