Manual Referencia c++

Share Embed Donate


Short Description

Descripción: Manual Referencia c++...

Description

´ UNIVERSIDAD DE MALAGA Dpto. Lenguajes y CC. Computaci´ on E.T.S.I. Inform´ atica Ingenier´ ıa Inform´ atica

Programaci´on Elemental en C++ Manual de Referencia Abreviado

Revision : 1,20

2

Dpto. Lenguajes y Ciencias de la Computaci´ on

Universidad de M´ alaga

´Indice general Pr´ ologo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1. Un programa C++

7 9

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 de tipos . . . . . 2.6.1. Promociones . . . . . . . . . . . . . 2.6.2. Conversiones enteras . . . . . . . . . 2.6.3. Conversiones aritm´eticas habituales 2.7. Conversiones expl´ıcitas de tipos . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

11 11 11 12 13 14 15 15 15 16 16

3. Estructuras de control 3.1. Sentencia, secuencia y bloque . 3.2. Declaraciones globales y locales 3.3. Sentencias de asignaci´ on . . . . 3.4. Sentencias de Selecci´ on . . . . . 3.5. Sentencias de Iteraci´ on. Bucles

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

19 19 19 20 21 22

4. Subprogramas. Funciones y procedimientos 4.1. Funciones y procedimientos . . . . . . . . . . 4.2. Definici´ on de subprogramas . . . . . . . . . . 4.3. Par´ ametros por valor y por referencia . . . . 4.4. Subprogramas “en l´ınea” . . . . . . . . . . . . 4.5. Declaraci´ on de subprogramas . . . . . . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

25 25 26 26 28 28

5. Entrada / Salida b´ asica 5.1. Salida . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2. Entrada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

31 31 31

6. Tipos compuestos 6.1. Registros o estructuras . . . . . . . . . . . . . . 6.2. Agregados o “Arrays” . . . . . . . . . . . . . . 6.3. Agregados multidimensionales . . . . . . . . . . 6.4. Cadenas de caracteres . . . . . . . . . . . . . . 6.5. Par´ ametros de tipos compuestos . . . . . . . . 6.6. Par´ ametros de agregados de tama˜ no variable . 6.7. Inicializaci´ on de variables de tipo compuesto . 6.8. Operaciones sobre variables de tipo compuesto 6.9. Uniones . . . . . . . . . . . . . . . . . . . . . .

35 35 35 36 37 38 38 39 40 40

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

3

. . . . .

. . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

´INDICE GENERAL

4

6.10. Campos de bits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

41

7. Biblioteca “string” de C++

43

8. Memoria din´ amica. Punteros 8.1. Declaraci´ on . . . . . . . . . . . . . . . . . . . . . 8.2. Desreferenciaci´ on . . . . . . . . . . . . . . . . . . 8.3. Memoria Din´ amica . . . . . . . . . . . . . . . . . 8.4. Estructuras autoreferenciadas . . . . . . . . . . . 8.5. Memoria din´ amica de agregados . . . . . . . . . 8.6. Paso de par´ ametros de variables de tipo puntero 8.7. Operaciones sobre variables de tipo puntero . . . 8.8. Operador de indirecci´ on . . . . . . . . . . . . . . 8.9. Punteros a subprogramas . . . . . . . . . . . . .

. . . . . . . . .

47 47 47 48 48 49 49 50 50 51

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

53 53 53 54 55 57 57 59 59 59 60 60 61 61 61 62

10.M´ odulos 10.1. Definici´ on e implementaci´ on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.2. Espacios de nombre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

63 63 64

11.Manejo de errores. Excepciones

67

12.Sobrecarga de subprogramas y operadores 12.1. Sobrecarga de subprogramas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.2. Sobrecarga de operadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

71 71 72

13.Tipos abstractos de datos 13.1. M´etodos definidos autom´ aticamente por el compilador . . . . . . . . . . . . . . . . 13.2. Requisitos de las clases respecto a las excepciones . . . . . . . . . . . . . . . . . . . 13.3. Punteros a miembros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

75 86 86 87

14.Programaci´ on Gen´ erica. Plantillas

89

. . . . . . . . .

9. Entrada / Salida. Ampliaci´ on, control y ficheros 9.1. El “buffer” de entrada y el “buffer” de salida . . . 9.2. Los flujos est´ andares . . . . . . . . . . . . . . . . . 9.3. Control de flujos. Estado . . . . . . . . . . . . . . . 9.4. Entrada/Salida formateada . . . . . . . . . . . . . 9.5. Operaciones de salida . . . . . . . . . . . . . . . . 9.6. Operaciones de entrada . . . . . . . . . . . . . . . 9.7. Buffer . . . . . . . . . . . . . . . . . . . . . . . . . 9.8. Ficheros . . . . . . . . . . . . . . . . . . . . . . . . 9.9. Ficheros de entrada . . . . . . . . . . . . . . . . . . 9.10. Ficheros de salida . . . . . . . . . . . . . . . . . . . 9.11. Ejemplo de ficheros . . . . . . . . . . . . . . . . . . 9.12. Ficheros de entrada/salida . . . . . . . . . . . . . . 9.13. Flujo de entrada desde una cadena . . . . . . . . . 9.14. Flujo de salida a una cadena . . . . . . . . . . . . 9.15. Jerarqu´ıa de clases de flujo est´andar . . . . . . . .

. . . . . . . . .

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

. . . . . . . . .

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

. . . . . . . . .

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

. . . . . . . . .

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

. . . . . . . . .

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

. . . . . . . . .

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

. . . . . . . . .

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

. . . . . . . . .

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

. . . . . . . . .

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

. . . . . . . . .

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

. . . . . . . . .

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

. . . . . . . . .

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

. . . . . . . . .

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

. . . . . . . . .

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

. . . . . . . . .

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

. . . . . . . . .

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

. . . . . . . . .

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

15.Programaci´ on orientada a objetos 93 15.1. M´etodos est´ aticos y virtuales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 Dpto. Lenguajes y Ciencias de la Computaci´ on

Universidad de M´ alaga

´INDICE GENERAL 16.Biblioteca Est´ andar de C++. STL 16.1. Caracter´ısticas comunes . . . . . . . . 16.1.1. Ficheros . . . . . . . . . . . . . 16.1.2. Contenedores . . . . . . . . . . 16.1.3. Tipos definidos . . . . . . . . . 16.1.4. Iteradores . . . . . . . . . . . . 16.1.5. Acceso . . . . . . . . . . . . . . 16.1.6. Operaciones de Pila y Cola . . 16.1.7. Operaciones de Lista . . . . . . 16.1.8. Operaciones . . . . . . . . . . . 16.1.9. Constructores . . . . . . . . . . 16.1.10.Asignaci´ on . . . . . . . . . . . 16.1.11.Operaciones Asociativas . . . . 16.1.12.Resumen . . . . . . . . . . . . 16.1.13.Operaciones sobre Iteradores . 16.2. Contenedores . . . . . . . . . . . . . . 16.3. vector . . . . . . . . . . . . . . . . . . 16.4. list . . . . . . . . . . . . . . . . . . . . 16.5. deque . . . . . . . . . . . . . . . . . . 16.6. stack . . . . . . . . . . . . . . . . . . . 16.7. queue . . . . . . . . . . . . . . . . . . 16.8. priority-queue . . . . . . . . . . . . . . 16.9. map . . . . . . . . . . . . . . . . . . . 16.10.multimap . . . . . . . . . . . . . . . . 16.11.set . . . . . . . . . . . . . . . . . . . . 16.12.multiset . . . . . . . . . . . . . . . . . 16.13.bitset . . . . . . . . . . . . . . . . . . 16.14.Iteradores . . . . . . . . . . . . . . . . 16.15.directos . . . . . . . . . . . . . . . . . 16.16.inversos . . . . . . . . . . . . . . . . . 16.17.inserters . . . . . . . . . . . . . . . . . 16.18.stream iterators . . . . . . . . . . . . . 16.19.Operaciones sobre Iteradores . . . . . 16.20.Objetos Funci´ on y Predicados . . . . . 16.21.Algoritmos . . . . . . . . . . . . . . . 16.22.Garant´ıas (excepciones) de operaciones 16.23.Numericos . . . . . . . . . . . . . . . . 16.24.L´ımites . . . . . . . . . . . . . . . . . 16.25.Run Time Type Information (RTTI) .

5

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . sobre contenedores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

17.T´ ecnicas de programaci´ on usuales en C++ 17.1. Adquisici´ on de recursos es Inicializaci´on . . . 17.2. Ocultar la implementaci´ on . . . . . . . . . . . 17.3. Control de elementos de un contenedor . . . . 17.4. Redirecci´ on transparente de la salida est´andar 17.5. Eventos . . . . . . . . . . . . . . . . . . . . . 17.6. Restricciones en programaci´ on gen´erica . . .

. . . . . . . . . a un . . . . . .

. . . . . . . . . . . . string . . . . . . . .

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

. . . . . .

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

. . . . . .

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

. . . . . .

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

. . . . . .

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

. . . . . .

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

. . . . . .

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

. . . . . .

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

. . . . . .

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

. . . . . .

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

. . . . . .

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

. . . . . .

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

. . . . . .

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

. . . . . .

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

103 103 103 103 104 104 104 105 105 105 105 106 106 106 106 106 107 108 111 113 114 114 115 116 117 117 118 119 119 120 121 121 123 123 126 128 129 129 130

. . . . . .

131 131 131 134 139 140 140

18.Gesti´ on Din´ amica de Memoria 143 18.1. Gesti´ on de Memoria Din´ amica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 A. Precedencia de Operadores en C

149

B. Precedencia de Operadores en C++

151

Dpto. Lenguajes y Ciencias de la Computaci´ on

Universidad de M´ alaga

´INDICE GENERAL

6 C. Biblioteca b´ asica C.1. cctype . . . . C.2. cstring . . . . C.3. cstdio . . . . C.4. cstdlib . . . . C.5. cassert . . . . C.6. cmath . . . . C.7. ctime . . . . . C.8. climits . . . . C.9. cfloat . . . . . C.10.conio.h . . . .

ANSI-C (+ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

conio) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

155 155 155 156 157 157 157 158 158 158 159

D. El preprocesador

161

E. Errores m´ as comunes

163

F. Caracter´ısticas no contempladas

165

G. Bibliograf´ıa

167

´ Indice

167

Dpto. Lenguajes y Ciencias de la Computaci´ on

Universidad de M´ alaga

Pr´ ologo Este manual pretende ser una gu´ıa de referencia abreviada para la utilizaci´on del lenguaje C++ en el desarrollo de programas. Est´a orientada a alumnos de primer curso de programaci´on de Ingenier´ıa Inform´ atica. 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++. De hecho no considera ning´ un aspecto del lenguaje enfocado al paradigma de “Programaci´on Orientada a Objetos”. 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 versi´ on preliminar y se encuentra actualmente bajo desarrollo. Se difunde en la creencia de que puede ser u ´til, a´ un siendo una versi´on preliminar.

7

8

Dpto. Lenguajes y Ciencias de la Computaci´ on

´INDICE GENERAL

Universidad de M´ alaga

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 (cap. 10). 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 (vease cap´ıtulo 2) y de subprogramas (cap. 4) 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, llamada 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 tr´as 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 imprime los n´ umeros menores que uno dado por teclado. //- fichero: numeros.cpp -------------------------------------------#include // biblioteca de entrada/salida using namespace std; /* * Imprime los numeros menores a ’n’ */ void numeros(int n) { for (int i = 0; i < n; ++i) { cout b) { int aux = a; a = b; b = aux; } } int calcular_menor(int a, int b) { int menor; if (a < b) { menor = a; } else { menor = b; } return menor; } La definici´ on de un subprograma comienza con una cabecera en la que se especifica en primer lugar el tipo del valor devuelto por ´este si es una funci´on, o void en caso de ser un procedimiento. A continuaci´ on vendr´ a el nombre del subprograma y la declaraci´on de sus par´ametros. El cuerpo del subprograma determina la secuencia de acciones necesarias para resolver el problema especificado. En el caso de una funci´on, el valor que toma tras la llamada vendr´a dado por el resultado de evaluar la expresi´ on de la construcci´on return. Aunque C++ es m´as flexible, nosostros s´ olo permitiremos una u ´nica utilizaci´on del return y deber´a ser al final del cuerpo de la funci´ on. Nota: la funci´ on calcular_menor anterior tambi´en podr´ıa haber sido definida de la siguiente forma: int calcular_menor(int a, int b) { return ( (a < b) ? a : b ) ; } Normalmente la soluci´ on de un subproblema o la ejecuci´on de una operaci´on depender´a del valor de algunos datos, modificar´ a el valor de otros datos, y posiblemente generar´a nuevos valores. Todo este flujo de informaci´ on se realiza a traves de los par´ametros o argumentos del subprograma.

4.3.

Par´ ametros por valor y por referencia

Llamaremos argumentos o par´ ametros de entrada a aquellos que se utilizan para recibir la informaci´ on necesaria para realizar la computaci´on. Por ejemplo los argumentos a y b de la Dpto. Lenguajes y Ciencias de la Computaci´ on

Universidad de M´ alaga

´ 4.3. PARAMETROS POR VALOR Y POR REFERENCIA

27

funci´ on calcular_menor anterior. Los argumentos de entrada se reciben por valor , que significa que son valores que se copian desde el sitio de la llamada a los argumentos en el momento de la ejecuci´on del subprograma. Se declaran especificando el tipo y el identificador asociado. Llamaremos argumentos o par´ ametros de salida a aquellos que se utilizan para transferir informaci´ on producida como parte de la computaci´on/soluci´on realizada por el subprograma. Ejemplo: int main() { int cociente; int resto; dividir(7, 3, cociente, resto); // ahora ’cociente’ valdra 2 y ’resto’ valdra 1 } Su definici´ on podr´ıa ser la siguiente: void dividir(int dividendo, int divisor, int& cociente, int& resto) { cociente = dividendo / divisor; resto = dividendo % divisor; } As´ı, dividendo y divisor son argumentos de entrada y son pasados “por valor” como se vi´ o anteriormente. Sin embargo, tanto cociente como resto son argumentos de salida (se utilizan para devolver valores al lugar de llamada), por lo que es necesario que se pasen por referencia que significa que ambos argumentos ser´an referencias a las variables que se hayan especificado en la llamada. Es decir, cualquier acci´on que se haga sobre ellas es equivalente a que se realice sobre las variables referenciadas. Se declaran especificando el tipo, el s´ımbolo “ampersand” (&) y el identificador asociado. Llamaremos argumentos o par´ ametros de entrada/salida a aquellos que se utilizan para recibir informaci´ on necesaria para realizar la computaci´on, y que tras ser modificada se transfiere al lugar de llamada como parte de la informaci´on producida resultado de la computaci´on del subprograma. Por ejemplo los argumentos a y b del procedimiento ordenar anterior. Los argumentos de entrada/salida se reciben por referencia y se declaran como se especific´ o anteriormente. Tambi´en es posible recibir los par´ ametros de entrada por referencia constante de tal forma que el par´ ametro ser´ a una referencia al argumento especificado en la llamada, tomando as´ı su valor, pero no podr´ a modificarlo al ser una referencia constante, evitando as´ı la sem´antica de salida asociada al paso por referencia. Para ello, se declaran como se especific´o anteriormente para el paso por referencia, pero anteponiendo la palabra reservada const. int calcular_menor(const int& a, const int& b) { return ( (a < b) ? a : b ) ; } Dpto. Lenguajes y Ciencias de la Computaci´ on

Universidad de M´ alaga

CAP´ITULO 4. SUBPROGRAMAS. FUNCIONES Y PROCEDIMIENTOS

28

En la llamada a un subprograma, una expresi´on de un tipo compatible es adecuada para un par´ ametro que se pase por valor, sin embargo, si el par´ametro se pasa por referencia es obligatorio que sea pasada como par´ ametro actual una variable que concuerde en tipo. Si el paso es por referencia constante ((const int& x)) es posible que el par´ametro actual sea una expresi´on de tipo compatible.

4.4.

Subprogramas “en l´ınea”

La llamada a un subprograma ocasiona cierta p´erdida de tiempo de ejecuci´on en el control de la misma (sobrecarga). Hay situaciones en las que el subprograma es muy peque˜ no y nos interesa eliminar la sobrecarga que produce su llamada. En ese caso podemos especificar que el subprograma se traduzca como c´ odigo en l´ınea en vez de como una llamada a un subprograma. Para ello se especificar´a la palabra reservada inline justo antes del tipo. inline int calcular_menor(int a, int b) { return ( (a < b) ? a : b ) ; }

4.5.

Declaraci´ on de subprogramas

Los subprogramas, al igual que los tipos, constantes y variables, deben ser declarados antes de ser utilizados. Dicha declaraci´ on se puede realizar de dos formas: una de ellas consiste simplemente en definir el subprograma antes de utilizarlo. La otra posibilidad consiste en declarar el subprograma antes de su utilizaci´ on, y definirlo posteriormente. El ´ambito de visibilidad del subprograma ser´ a global al fichero, es decir, desde el lugar donde ha sido declarado hasta el final del fichero. Para declarar un subprograma habra que especificar el tipo del valor devuelto (o void si es un procedimiento) seguido por el nombre y la declaraci´on de los argumentos igual que en la definici´on del subprograma, pero sin definir el cuerpo del mismo. En lugar de ello se terminar´a la declaraci´on con el caracter “punto y coma” (;). int calcular_menor(int a, int b);

// declaracion de ’calcular_menor’

int main() { int x = 8; int y = 4; int z; z = calcular_menor(x, y); // ahora ’z’ contine el calcular_menor numero de ’x’ e ’y’ .............. } Ejemplo de un programa que imprime los n´ umeros primos menores que 100. //- fichero: primos1.cpp -------------------------------------------#include

// ver siguiente capitulo

Dpto. Lenguajes y Ciencias de la Computaci´ on

Universidad de M´ alaga

´ DE SUBPROGRAMAS 4.5. DECLARACION using namespace std;

29

// ver siguiente capitulo

const int MAXIMO = 100; inline bool es_divisible(int x, int y) { return ( x % y == 0 ); } bool es_primo(int x) { int i; for (i = 2; ((i < x) && ( ! es_divisible(x, i))); ++i) { // vacio } return (i >= x); } void escribir(int x) { cout
View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF