La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Unidad 15 Características de C++ no relacionadas con el DOO.

Presentaciones similares


Presentación del tema: "Unidad 15 Características de C++ no relacionadas con el DOO."— Transcripción de la presentación:

1

2 Unidad 15 Características de C++ no relacionadas con el DOO

3 IES Nervión Dpto. Informática M.Asunción Criado 2 Objetivos Conocer y utilizar adecuadamente recursos incorporados por el lenguaje C++ como extensión de C. Conocer y utilizar operadores para la asignación dinámica de memoria en sustitución de funciones. Diseñar funciones de código en línea. Construir funciones más flexibles, con interfaces múltiples. Profundizar en el conocimiento de la entrada/salida a través de streams. Conocer las diferencias del cualificador const en C y C++ Incorporar las nuevas técnicas a nuestros programas.

4 IES Nervión Dpto. Informática M.Asunción Criado 3 1. INTRODUCCIÓN 2. FUNCIONES inline 3. ARGUMENTOS CON VALORES POR DEFECTO. 4. FUNCIONES CON NÚMERO VARIABLE DE ARGUMENTOS. 5. OPERADORES DE ASIGNACIÓN DINÁMICA. 5.1 Operador new. 5.2. Operador delete. 6. E/S CON STREMS. 6.1 Formatos. 6.2. Manipuladores. 7. EL ESPECIFICADOR const. Contenidos

5 IES Nervión Dpto. Informática M.Asunción Criado 4 Introducción En este capítulo se estudiarán características de C++ no asociadas al DOO, por lo que pueden usarse en metodología estructurada como C mejorado. Algunas de estas propiedades ya han sido usadas en este sentido: Obligatoriedad del prototipado. Uso de referencias. Conversión por asignación mediante cast en punteros void. Nuevos delimitadores de comentarios. Otros que metodológicamente no aportan beneficios: Construcción de funciones inline. Número variable de argumentos (elipsis). Valores por defecto de los argumentos. Otros diseñados con filosofía OO: Operadores de asignación dinámica: new y delete. Objetos cin y cout y operadores de flujo >> y <<

6 IES Nervión Dpto. Informática M.Asunción Criado 5 Funciones inline Son funciones que se expanden en tiempo de compilación. Es una petición al compilador, que puede ser atendida o no por este. Tres formas de crear una función en línea: Definiendo la función dentro de la clase. Definiendo la función fuera de la clase poniendo delante el especificador inline. Definiendo una función no miembro poniendo delante el especificador inline (así puede usarse en programación estructurada).

7 IES Nervión Dpto. Informática M.Asunción Criado 6 Ejemplos class X { private: int m; public: int func (void) { return m; } int Mul(); } inline int X:: Mul (void) { return m*m; } inline int maximo (int a,int b) { return a>b?a:b; }

8 IES Nervión Dpto. Informática M.Asunción Criado 7 Funciones inline Ventajas: Más rapidez de ejecución. Inconvenientes: Código más extenso. No pueden ser llamadas desde otra función. Recompilación de los módulos que las usan si sufren modificaciones. Pueden ocasionar colapsos de memoria si existen muchas. Si aparecen en los archivos cabecera su código es público.

9 IES Nervión Dpto. Informática M.Asunción Criado 8 Uso de funciones inline Usar: En funciones de código corto y alto número de llamadas. No usar, porque será desestimada: Cuando se necesite la dirección de la función. En funciones recursivas. En funciones que contienen destructores locales. En funciones virtuales. En funciones que contengan sentencias: break, case, continue, do, for, switch, while. Funciones que no tengan return. Si el compilador no la va a considerar inline dará un mensaje de aviso.

10 IES Nervión Dpto. Informática M.Asunción Criado 9 Argumentos con valores por defecto A los parámetros de una función puede asignárseles valores por defecto. Se puede asignar valores a cualquiera de los parámetros, pero una vez asignado un valor a uno de ellos, a partir de éste todos los demás argumentos deberán tener también un valor asignado. Si una llamada tiene menos parámetros de los requeridos se asumen para los que faltan los valores por defecto. Los valores por defecto se asignan en el prototipo o en la cabecera (en el primero que se realice). Formato: NombreFunción (Arg1 = valor1, Arg2 = valor2, Argn = valorn);

11 IES Nervión Dpto. Informática M.Asunción Criado 10 Ejemplos void PintaPunto (int x, int y, int z = 0); void PintaPunto (int x, int y, int z =5); void PintaPunto (int x = 3, int y, int z); void PintaPunto (int x, int y = 1, int z); Correcto, si se llama PintaPunto(3,2), la función se ejecuta con (3,2,0) Incorrecto, por redefinición de z, antes se definió 0 Incorrecto, deben definirse también los argumentos que van detrás si no han sido inicializados, en este caso y, pues z ya está definido antes. Correcto, si se llama PintaPunto(5), la función se ejecuta con (5,1,0). Uso: - Inicializar objetos con métodos constructores - Tipificación de módulos en librerías especializadas (ventanas que tengan siempre las mismas características)

12 IES Nervión Dpto. Informática M.Asunción Criado 11 Elipsis Si el número de parámetros de una función es variable se utiliza la elipsis que se escribe..., y se coloca, detrás de los parámetros fijos. Los parámetros fijos se comprueban en compilación y los variables en ejecución. Ej. int func (char C, int I,...); // Esta función tiene un parámetro carácter y otro entero, de los demás no se sabe su número ni su tipo. En C++ se puede omitir la coma. En stdarg.h existen declaraciones para implementar la elipsis. Ver stdarg.doc Ver ejercicio elipsis.cpp

13 IES Nervión Dpto. Informática M.Asunción Criado 12 Operador new Es un operador de asignación dinámica de memoria del montón (heap). Sintaxis: PunteroObjeto = new TipoObjeto[(Expresión)]; new asigna a PunteroObjeto memoria para almacenar un valor de tipo TipoObjeto. Devuelve la dirección de la memoria asignada o NULL si no existe espacio suficiente. Expresión puede tomar tres formas: Puede no existir int *PunteroEntero = new int; // 2 bytes Puede existir para inicializar el objeto para el que se pide memoria (no es aplicable a los arrays). Racional *PRacional = new Racional (2,5); Puede usarse para solicitar memoria para almacenar múltiples objetos. Si es un array, devolverá la dirección de comienzo char * Nombre = new char [30]; Si el array es multidimensional hay que indicar todas las dimensiones. int *PuntArray = new int [3] [20]; // 120 bytes

14 IES Nervión Dpto. Informática M.Asunción Criado 13 Diferencias con malloc Es un operador no una función, por tanto no necesita prototipo. No necesita usar casting. Se puede inicializar el objeto al pedir memoria. Llama automáticamente al constructor por defecto para crear e inicializar los objetos.

15 IES Nervión Dpto. Informática M.Asunción Criado 14 Operador delete Es un operador de devolución de memoria dinámica. Sintaxis: delete PunteroObjeto; o bien en caso de arrays delete [ ] PunteroObjeto; // para los tipos estándares de C //no son necesarios los [ ] Ejemplos: delete (Punt_entero); delete [ ] Punt_array; delete Punt_real; delete nombre; delete [ ] nombre; Si PunteroObjeto es un objeto de una clase el operador delete llama automáticamente al destructor por defecto.

16 IES Nervión Dpto. Informática M.Asunción Criado 15 Entrada/salida estándar Para la entrada/salida de alto nivel a través de streams se usa: La librería iostream.h (ver en TC) Los objetos especiales: cout, salida. (objeto de ostream) cin, para la entrada. (objeto de istream) cerr, error. (objeto de ostream) clog, error con buffer. (objeto de ostream) Los operadores de flujo: Operador de inserción o flujo a la izquierda (salida) << Operador de extracción o flujo a la derecha (entrada) >> Los manipuladores para E/S: con argumentos (iomanip.h). Sin argumentos (iostream.h).

17 IES Nervión Dpto. Informática M.Asunción Criado 16 Ejemplo # include iostream.h void main (void) { int a; float b; cout << introduzca el valor de a: ; cin >> a; cout << \n a = << a <<introduzca el valor de b: ; cin>> b; cout << \n el valor de a*b = << a*b; cout << \n Se acabó ; }

18 IES Nervión Dpto. Informática M.Asunción Criado 17 Ejemplos int i= 36; cout << dec << i << << hex << i <<endl; // muestra 36 24 y salta línea. int i= 123; cout << setfill (-) << setw (6) << i <<endl; // muestra ---123 y salta línea. Ver pag. 543-545

19 IES Nervión Dpto. Informática M.Asunción Criado 18 Especificador const En C++ Las constantes simbólicas también pueden definirse con el especificador const. Ejemplo: const float Pi = 3.1416; // En C y C++ Diferencias de const en C y en C++ : En C es una variable que no puede cambiar de valor, en C++ es realmente una constante. En C ocupa memoria, en C++ se guardan en la zona de constantes, por lo que no consumen memoria disponible. En C se evalúan en tiempo de ejecución, por lo que no pueden usarse para dimensionar arrays. En C++ la evaluación se realiza en tiempo de compilación y, por tanto, pueden dimensionar arrays.

20 IES Nervión Dpto. Informática M.Asunción Criado 19 Descansar demasiado es oxidarse Sir Walter Scott Escritor(1771-1832).


Descargar ppt "Unidad 15 Características de C++ no relacionadas con el DOO."

Presentaciones similares


Anuncios Google