329 93 1MB
Spanish Pages [338] Year 2011
´ UNIVERSIDAD DE MALAGA Dpt. Lenguajes y CC. Computaci´ on E.T.S.I. Inform´ atica Ingenier´ ıa Inform´ atica
Fundamentos de Programaci´on con el Lenguaje de Programaci´on C++ Vicente Benjumea
Manuel Rold´an
6 de julio de 2011
2
Este obra est´ a bajo una licencia Reconocimiento-NoComercial-CompartirIgual 3.0 Unported de Creative Commons: No se permite un uso comercial de la obra original ni de las posibles obras derivadas, la distribuci´on de las cuales se debe hacer con una licencia igual a la que regula la obra original. Para ver una copia de esta licencia, visite http://creativecommons.org/licenses/by-nc-sa/3.0/deed.es ES o envie una carta a Creative Commons, 171 Second Street, Suite 300, San Francisco, California 94105, USA. Usted es libre de: • Copiar, distribuir y comunicar p´ ublicamente la obra. • Hacer obras derivadas. Bajo las siguientes condiciones: • Reconocimiento (Attribution) – Debe reconocer los cr´editos de la obra de la manera especificada por el autor o el licenciador (pero no de una manera que sugiera que tiene su apoyo o apoyan el uso que hace de su obra). • No comercial (Non commercial) – No puede utilizar esta obra para fines comerciales. • Compartir bajo la misma licencia (Share alike) – Si altera o transforma esta obra, o genera una obra derivada, s´olo puede distribuir la obra generada bajo una licencia id´entica a ´esta. Entendiendo que: • Renuncia – Alguna de estas condiciones puede no aplicarse si se obtiene el permiso del titular de los derechos de autor • Dominio P´ ublico – Cuando la obra o alguno de sus elementos se halle en el dominio p´ ublico seg´ un la ley vigente aplicable, esta situaci´on no quedar´a afectada por la licencia. • Otros derechos – Los derechos siguientes no quedan afectados por la licencia de ninguna manera: ◦ Los derechos derivados de usos leg´ıtimos u otras limitaciones reconocidas por ley no se ven afectados por lo anterior. ◦ Los derechos morales del autor ◦ Derechos que pueden ostentar otras personas sobre la propia obra o su uso, como por ejemplo derechos de imagen o de privacidad. • Aviso – Al reutilizar o distribuir la obra, tiene que dejar bien claro los t´erminos de la licencia de esta obra.
Dpto. Lenguajes y Ciencias de la Computaci´ on
Universidad de M´ alaga
´Indice general Pr´ ologo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
I
Programaci´ on B´ asica
9
11
1. Un Programa C++
13
2. Tipos Simples 2.1. Declaraci´ on Vs. Definici´ on . . . . . . . . . . . . . . . . . . . . . . . . . 2.2. Tipos Simples Predefinidos . . . . . . . . . . . . . . . . . . . . . . . . 2.3. Tipos Simples Enumerados . . . . . . . . . . . . . . . . . . . . . . . . 2.4. Constantes y Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.5. Operadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.6. Conversiones Autom´ aticas (Impl´ıcitas) de Tipos . . . . . . . . . . . . . 2.7. Conversiones Expl´ıcitas de Tipos . . . . . . . . . . . . . . . . . . . . . 2.8. Tabla ASCII . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.9. Algunas Consideraciones Respecto a Operaciones con N´ umeros Reales
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
17 17 17 19 20 21 23 23 25 25
3. Entrada y Salida de Datos B´ asica 3.1. Salida de Datos . . . . . . . . . . . . . . . . . . 3.2. Entrada de Datos . . . . . . . . . . . . . . . . . 3.3. El “Buffer” de Entrada y el “Buffer” de Salida 3.4. Otras Operaciones de Entrada y Salida . . . . . 3.5. Control del Estado del Flujo de Datos . . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
27 27 29 30 30 30
4. Estructuras de Control 4.1. Sentencia, Secuencia y Bloque . . 4.2. Declaraciones Globales y Locales 4.3. Sentencias de Asignaci´ on . . . . . 4.4. Sentencias de Selecci´ on . . . . . . 4.5. Sentencias de Iteraci´ on. Bucles . 4.6. Programaci´ on Estructurada . . . 4.7. Ejemplos . . . . . . . . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
33 33 33 34 35 37 39 39
5. Subprogramas. Funciones y Procedimientos 5.1. Funciones y Procedimientos . . . . . . . . . . . . . . . . . . 5.2. Definici´ on de Subprogramas . . . . . . . . . . . . . . . . . . 5.3. Ejecuci´ on de Subprogramas . . . . . . . . . . . . . . . . . . 5.4. Paso de Par´ ametros. Par´ ametros por Valor y por Referencia 5.5. Criterios de Modularizaci´ on . . . . . . . . . . . . . . . . . . 5.6. Subprogramas “en L´ınea” . . . . . . . . . . . . . . . . . . . 5.7. Declaraci´ on de Subprogramas. Prototipos . . . . . . . . . . 5.8. Sobrecarga de Subprogramas y Operadores . . . . . . . . . 5.9. Par´ ametros por Defecto . . . . . . . . . . . . . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
41 41 42 43 43 45 46 46 46 47
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
3
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
´INDICE GENERAL
4
5.10. Subprogramas y Flujos de Entrada y Salida . . . . . . . . . . . . . . . . . . . . . . 5.11. Pre-Condiciones y Post-Condiciones . . . . . . . . . . . . . . . . . . . . . . . . . . 5.12. Ejemplos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
48 48 49
6. Tipos Compuestos 6.1. Paso de Par´ ametros de Tipos Compuestos . . . . . . . . 6.2. Cadenas de Caracteres en C++: el Tipo String . . . . . 6.3. Registros o Estructuras . . . . . . . . . . . . . . . . . . 6.4. Agregados: el Tipo Array . . . . . . . . . . . . . . . . . 6.5. Resoluci´ on de Problemas Utilizando Tipos Compuestos
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
51 51 52 59 62 71
7. B´ usqueda y Ordenaci´ on 7.1. B´ usqueda Lineal (Secuencial) . . . . . . . 7.2. B´ usqueda Binaria . . . . . . . . . . . . . . 7.3. Ordenaci´ on por Intercambio (Burbuja) . . 7.4. Ordenaci´ on por Selecci´ on . . . . . . . . . 7.5. Ordenaci´ on por Inserci´ on . . . . . . . . . 7.6. Ordenaci´ on por Inserci´ on Binaria . . . . . 7.7. Aplicaci´ on de los Algoritmos de B´ usqueda
. . . . . . y
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ordenaci´on
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
77 77 78 79 80 80 81 82
8. Otros Tipos Compuestos en C 8.1. Agregados o Arrays Predefinidos . . . . . 8.2. Cadenas de Caracteres al Estilo-C . . . . 8.3. Uniones . . . . . . . . . . . . . . . . . . . 8.4. Campos de Bits . . . . . . . . . . . . . . . 8.5. Resoluci´ on de Problemas Utilizando Tipos
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Compuestos
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
87 . 87 . 98 . 104 . 105 . 105
´ 9. Algunas Bibliotecas Utiles
111
II
113
Programaci´ on Intermedia
10.Almacenamiento en Memoria Secundaria: Ficheros 10.1. Flujos de Entrada y Salida Asociados a Ficheros . . . . . . . . 10.2. Entrada de Datos desde Ficheros de Texto . . . . . . . . . . . . 10.3. Salida de Datos a Ficheros de Texto . . . . . . . . . . . . . . . 10.4. Ejemplos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.5. Otros Tipos de Flujos de Ficheros . . . . . . . . . . . . . . . . 10.5.1. Ficheros Binarios . . . . . . . . . . . . . . . . . . . . . . 10.5.2. Acceso Directo en Ficheros . . . . . . . . . . . . . . . . 10.5.3. Flujos de Entrada y Salida . . . . . . . . . . . . . . . . 10.6. Flujos de Entrada y Salida Vinculados a Cadenas de Caracteres
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
115 116 117 119 121 126 126 129 130 130
11.M´ odulos y Bibliotecas 11.1. Interfaz e Implementaci´ on del M´odulo . . . . . . . . . . . . . . . 11.2. Compilaci´ on Separada y Enlazado . . . . . . . . . . . . . . . . . 11.3. Espacios de Nombre . . . . . . . . . . . . . . . . . . . . . . . . . 11.4. Herramientas de Ayuda a la Gesti´on de la Compilaci´on Separada
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
133 133 135 136 141
12.Manejo de Errores. Excepciones 12.1. Errores de Programaci´ on y Asertos . . . . 12.2. Situaciones An´ omalas Excepcionales . . . 12.3. Gesti´ on de Errores Mediante Excepciones 12.4. Excepciones Est´ andares . . . . . . . . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
145 145 146 147 152
Dpto. Lenguajes y Ciencias de la Computaci´ on
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
Universidad de M´ alaga
´INDICE GENERAL
5
13.Tipos Abstractos de Datos 13.1. Tipos Abstractos de Datos en C++: Clases . . . . . . . . 13.1.1. Definici´ on e Implementaci´on de Clases “en L´ınea” 13.1.2. Definici´ on de Clases e Implementaci´on Separada . 13.2. M´etodos Definidos Autom´ aticamente por el Compilador . 13.3. Requisitos de las Clases Respecto a las Excepciones . . . . 13.4. M´ as sobre M´etodos y Atributos . . . . . . . . . . . . . . . 13.5. Sobrecarga de Operadores . . . . . . . . . . . . . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
155 156 156 159 172 173 173 177
14.Introducci´ on a la Programaci´ on Gen´ erica. Plantillas 14.1. Subprogramas Gen´ericos . . . . . . . . . . . . . . . . . . . . . . 14.2. Tipos Abstractos de Datos Gen´ericos . . . . . . . . . . . . . . . 14.3. Par´ ametros Gen´ericos por Defecto . . . . . . . . . . . . . . . . 14.4. Definici´ on de Tipos dentro de la Definici´on de Tipos Gen´ericos 14.5. Separaci´ on de Definici´ on e Implementaci´on . . . . . . . . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
179 179 181 184 185 186
15.Memoria Din´ amica. Punteros 15.1. Punteros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15.2. Gesti´ on de Memoria Din´ amica . . . . . . . . . . . . . . . . 15.3. Operaciones con Variables de Tipo Puntero . . . . . . . . . 15.4. Paso de Par´ ametros de Variables de Tipo Puntero . . . . . 15.5. Abstracci´ on en la Gesti´ on de Memoria Din´amica . . . . . . 15.6. Estructuras Enlazadas . . . . . . . . . . . . . . . . . . . . . 15.7. Operaciones con Listas Enlazadas . . . . . . . . . . . . . . . 15.8. Gesti´ on de Memoria Din´ amica en Presencia de Excepciones 15.9. Comprobaci´ on de Gesti´ on de Memoria Din´amica . . . . . . 15.10.Operador de Direcci´ on . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
191 192 193 194 196 197 198 200 207 217 218
(STL) . . . . . . . . . . . . . . . . . . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
221 221 225 227 229
. . . . . . .
. . . . . . .
. . . . . . . . . .
16.Introducci´ on a los Contenedores de la Biblioteca Est´ andar 16.1. Vector . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16.2. Stack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16.3. Queue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16.4. Resoluci´ on de Problemas Utilizando Contenedores . . . . . .
III
. . . . . . . . . .
Programaci´ on Avanzada
233
17.Programaci´ on Orientada a Objetos
237
18.Memoria Din´ amica Avanzada 241 18.1. Memoria Din´ amica de Agregados . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241 18.2. Punteros a Subprogramas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242 18.3. Punteros Inteligentes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242 19.Tipos Abstractos de Datos Avanzados 19.1. Punteros a Miembros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19.2. Ocultar la Implementaci´ on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19.3. Control de Elementos de un Contenedor . . . . . . . . . . . . . . . . . . . . . . . .
245 245 245 250
20.Programaci´ on Gen´ erica Avanzada 20.1. Par´ ametros Gen´ericos por Defecto . . . 20.2. Tipos dentro de Clases Gen´ericas . . . . 20.3. M´etodos de Clase Gen´ericos . . . . . . . 20.4. Amigos Gen´ericos . . . . . . . . . . . . . 20.5. Restricciones en Programaci´ on Gen´erica
255 255 255 255 256 257
Dpto. Lenguajes y Ciencias de la Computaci´ on
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
Universidad de M´ alaga
´INDICE GENERAL
6
20.6. Especializaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258 20.7. Meta-programaci´ on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259 20.8. SFINAE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260 21.Buffer y Flujos de Entrada y Salida 21.1. Operaciones de Salida . . . . . . . . . . . . . . 21.2. Operaciones de Entrada . . . . . . . . . . . . . 21.3. Buffer . . . . . . . . . . . . . . . . . . . . . . . 21.4. Redirecci´ on Transparente de la Salida Est´andar 21.5. Ficheros . . . . . . . . . . . . . . . . . . . . . . 21.6. Ficheros de Entrada . . . . . . . . . . . . . . . 21.7. Ficheros de Salida . . . . . . . . . . . . . . . . 21.8. Ejemplo de Ficheros . . . . . . . . . . . . . . . 21.9. Ficheros de Entrada y Salida . . . . . . . . . . 21.10.Flujo de Entrada desde una Cadena . . . . . . 21.11.Flujo de Salida a una Cadena . . . . . . . . . . 21.12.Jerarqu´ıa de Clases de Flujo Est´andar . . . . .
. . . . . . un . . . . . . . . . . . . . . . .
. . . . . . . . . . . . String . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
263 263 263 265 267 268 268 269 269 270 270 270 271
22.T´ ecnicas de Programaci´ on Usuales en C++ 22.1. Adquisici´ on de Recursos es Inicializaci´on (RAII) 22.1.1. auto ptr (unique ptr) . . . . . . . . . . . 22.1.2. RAII Simple de Memoria Din´amica . . . . 22.1.3. RAII Simple Gen´erico . . . . . . . . . . . 22.1.4. RAII Gen´erico . . . . . . . . . . . . . . . 22.1.5. RAII Gen´erico . . . . . . . . . . . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
273 273 273 274 275 276 276
23.Gesti´ on Din´ amica de Memoria 23.1. Gesti´ on de Memoria Din´ amica . . . . . . . . . . 23.2. Gesti´ on de Memoria Din´ amica sin Inicializar . . 23.3. RAII: auto ptr . . . . . . . . . . . . . . . . . . . 23.4. Comprobaci´ on de Gesti´ on de Memoria Din´amica
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
279 279 282 282 283
24.Biblioteca Est´ andar de C++. STL 24.1. Caracter´ısticas Comunes . . . . . . . 24.1.1. Ficheros . . . . . . . . . . . . 24.1.2. Contenedores . . . . . . . . . 24.1.3. Tipos Definidos . . . . . . . . 24.1.4. Iteradores . . . . . . . . . . . 24.1.5. Acceso . . . . . . . . . . . . . 24.1.6. Operaciones de Pila y Cola . 24.1.7. Operaciones de Lista . . . . . 24.1.8. Operaciones . . . . . . . . . . 24.1.9. Constructores . . . . . . . . . 24.1.10.Asignaci´ on . . . . . . . . . . 24.1.11.Operaciones Asociativas . . . 24.1.12.Resumen . . . . . . . . . . . 24.1.13.Operaciones sobre Iteradores 24.2. Contenedores . . . . . . . . . . . . . 24.3. Vector . . . . . . . . . . . . . . . . . 24.4. List . . . . . . . . . . . . . . . . . . 24.5. Deque . . . . . . . . . . . . . . . . . 24.6. Stack . . . . . . . . . . . . . . . . . . 24.7. Queue . . . . . . . . . . . . . . . . . 24.8. Priority-Queue . . . . . . . . . . . . 24.9. Map . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . .
285 285 285 286 286 286 287 287 287 287 287 288 288 288 288 288 289 290 293 294 295 296 296
Dpto. Lenguajes y Ciencias de la Computaci´ on
. . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . .
. . . a . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . .
Universidad de M´ alaga
´INDICE GENERAL
7
24.10.Multimap . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24.11.Set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24.12.Multiset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24.13.Bitset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24.14.Iteradores . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24.15.Directos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24.16.Inversos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24.17.Inserters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24.18.Stream Iterators . . . . . . . . . . . . . . . . . . . . . . . . 24.19.Operaciones sobre Iteradores . . . . . . . . . . . . . . . . . 24.20.Objetos Funci´ on y Predicados . . . . . . . . . . . . . . . . . 24.21.Algoritmos . . . . . . . . . . . . . . . . . . . . . . . . . . . 24.22.Garant´ıas (Excepciones) de Operaciones sobre Contenedores 24.23.Num´ericos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24.24.L´ımites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24.25.Run Time Type Information (RTTI) . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
297 298 299 299 300 300 301 302 302 306 306 309 311 312 312 313
A. Precedencia de Operadores en C
315
B. Precedencia de Operadores en C++
317
C. Biblioteca B´ asica ANSI-C C.1. cassert . . . . . . . . . . C.2. cctype . . . . . . . . . . C.3. cmath . . . . . . . . . . C.4. cstdlib . . . . . . . . . . C.5. climits . . . . . . . . . . C.6. cfloat . . . . . . . . . . . C.7. ctime . . . . . . . . . . . C.8. cstring . . . . . . . . . . C.9. cstdio . . . . . . . . . . C.10.cstdarg . . . . . . . . . . C.11.conio.h . . . . . . . . . .
(+ conio) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
321 321 321 321 322 323 323 323 323 324 325 326
D. El Preprocesador
329
E. Errores M´ as Comunes
331
F. Caracter´ısticas no Contempladas
333
G. Bibliograf´ıa
335
´ Indice
335
Dpto. Lenguajes y Ciencias de la Computaci´ on
Universidad de M´ alaga
8
Dpto. Lenguajes y Ciencias de la Computaci´ on
´INDICE GENERAL
Universidad de M´ alaga
Pr´ ologo Este manual pretende ser una gu´ıa de referencia para la utilizaci´on del lenguaje de programaci´on C++ en el desarrollo de programas. Est´a orientada a alumnos de primer curso de programaci´on de Ingenier´ıa Inform´ atica. No obstante, hay algunos cap´ıtulos y secciones que presentan conceptos avanzados y requieren mayores conocimientos por parte del lector, y por lo tanto exceden de los conocimientos b´ asicos requeridos para un alumno de primer curso de programaci´on. Estos cap´ıtulos y secciones que presentan o requieren conceptos avanzados se encuentran marcados con un s´ımbolo
A , y no es necesario que sean le´ıdos por el lector, a los cuales podr´a acceder en cualquier otro momento posterior. Otros cap´ıtulos y secciones muestran estructuras y t´ecnicas de programaci´on obsoletas y no recomendadas en C++, sin embargo son mostradas en este manual por completitud. Estos cap´ıtulos y secciones est´ an marcados con el s´ımbolo OBS . Este manual se concibe como material de apoyo a la docencia, y requiere de las explicaciones impartidas en clase por el profesor para su aprendizaje. As´ı mismo, este manual no pretende “ense˜ nar a programar”, supone que el lector posee los fundamentos necesarios relativos a la programaci´on, y simplemente muestra como aplicarlos utilizando el Lenguaje de Programaci´ on C++. El lenguaje de programaci´ on C++ es un lenguaje muy flexible y vers´atil, y debido a ello, si se utiliza sin rigor puede dar lugar a construcciones y estructuras de programaci´on complejas, dif´ıciles de comprender y propensas a errores. Debido a ello, restringiremos tanto las estructuras a utilizar como la forma de utilizarlas. No pretende ser una gu´ıa extensa del lenguaje de programaci´on C++. Adem´as, dada la amplitud del lenguaje, hay caracter´ısticas del mismo que no han sido contempladas por exceder lo que entendemos que es un curso de programaci´on elemental. Este manual ha sido elaborado en el Dpto. de Lenguajes y Ciencias de la Computaci´on de la Universidad de M´ alaga. ´ ES UNA VERSION PRELIMINAR, INCOMPLETA Y SE ENCUENTRA ACTUALMENTE BAJO DESARROLLO. Se difunde en la creencia de que puede ser u ´til, a´ un siendo una versi´ on preliminar. La u ´ltima versi´ on de este documento puede ser descargada desde la siguiente p´agina web: http://www.lcc.uma.es/%7Evicente/docencia/index.html
o directamente desde la siguiente direcci´on: http://www.lcc.uma.es/%7Evicente/docencia/cpp/manual_referencia_cxx.pdf
9
10
Dpto. Lenguajes y Ciencias de la Computaci´ on
´INDICE GENERAL
Universidad de M´ alaga
Parte I
Programaci´ on B´ asica
11
Cap´ıtulo 1
Un Programa C++ En principio, un programa C++ se almacena en un fichero cuya extensi´on ser´a una de las siguientes: “.cpp”, “.cxx”, “.cc”, etc. M´ as adelante consideraremos programas complejos cuyo c´odigo se encuentra distribuido entre varios ficheros (v´ease 11). Dentro de este fichero, normalmente, aparecer´an al principio unas l´ıneas para incluir las definiciones de los m´ odulos de biblioteca que utilice nuestro programa. Posteriormente, se realizar´an declaraciones y definiciones de tipos, de constantes (v´ease 2) y de subprogramas (v´ease 5) cuyo ambito de visibilidad ser´ ´ a global a todo el fichero (desde el punto donde ha sido declarado hasta el final del fichero). De entre las definiciones de subprogramas, debe definirse una funci´on principal, denominada main, que indica donde comienza la ejecuci´on del programa. Al finalizar, dicha funci´on devolver´a un n´ umero entero que indica al Sistema Operativo el estado de terminaci´on tras la ejecuci´on del programa (un n´ umero 0 indica terminaci´on normal). En caso de no aparecer expl´ıcitamente el valor de retorno de main, el sistema recibir´a por defecto un valor indicando terminaci´on normal. Ejemplo de un programa que convierte una cantidad determinada de euros a su valor en pesetas. //- fichero: euros.cpp -------------------------------------------#include using namespace std; const double EUR_PTS = 166.386; int main() { cout > euros; double pesetas = euros * EUR_PTS; cout > euros; double pesetas = euros * EUR_PTS; cout