Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Objetivos
Conocer y utilizar adecuadamente recursos incorporados por el lenguaje C++ como extensin de C. Conocer y utilizar operadores para la asignacin dinmica de memoria en sustitucin de funciones. Disear funciones de cdigo en lnea.
Construir funciones ms flexibles, con interfaces mltiples. Profundizar en el conocimiento de la entrada/salida a travs de streams. Conocer las diferencias del cualificador const en C y C++ Incorporar las nuevas tcnicas a nuestros programas.
Contenidos
1. INTRODUCCIN 2. FUNCIONES inline 3. ARGUMENTOS CON VALORES POR DEFECTO. 4. FUNCIONES CON NMERO VARIABLE DE ARGUMENTOS. 5. OPERADORES DE ASIGNACIN DINMICA.
5.1 Operador new. 5.2. Operador delete.
7. EL ESPECIFICADOR const.
Introduccin
En este captulo se estudiarn caractersticas de C++ no asociadas al DOO, por lo que pueden usarse en metodologa estructurada como C mejorado. Algunas de estas propiedades ya han sido usadas en este sentido:
Obligatoriedad del prototipado. Uso de referencias. Conversin por asignacin mediante cast en punteros void. Nuevos delimitadores de comentarios. Construccin de funciones inline. Nmero variable de argumentos (elipsis). Valores por defecto de los argumentos. Operadores de asignacin dinmica: new y delete. Objetos cin y cout y operadores de flujo >> y <<
IES Nervin Dpto. Informtica M.Asuncin Criado
Funciones inline
Son funciones que se expanden en tiempo de compilacin. Es una peticin al compilador, que puede ser atendida o no por este. Distintas formas de crear una funcin en lnea:
Definiendo la funcin dentro de la clase. Definiendo la funcin miembro fuera de la clase poniendo delante el especificador inline.
Funcin no miembro de clase: poniendo delante el especificador inline (as puede usarse en programacin estructurada).
IES Nervin Dpto. Informtica M.Asuncin Criado 5
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; }
Funciones inline
Ventajas:
Ms rapidez de ejecucin. Cdigo ms extenso. No pueden ser llamadas desde otra funcin. Recompilacin de los mdulos que las usan si sufren modificaciones. Pueden ocasionar colapsos de memoria si existen muchas. Si aparecen en los archivos cabecera su cdigo es pblico.
IES Nervin Dpto. Informtica M.Asuncin Criado 7
Inconvenientes:
Usar:
Cuando se necesite la direccin de la funcin. 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.
Caractersticas:
Se puede asignar valor a cualquier parmetro, pero una vez asignado a uno de ellos, a partir de ste todos los dems argumentos deben tener tambin un valor asignado. Si una llamada tiene menos parmetros de los requeridos para los que faltan se asumen los valores por defecto. Los valores por defecto se asignan en el prototipo o en la cabecera.
Uso
Inicializar objetos con mtodos constructores Tipificacin de mdulos en libreras especializadas Ej. ventanas que tengan siempre las mismas caractersticas.
Formato:
NombreFuncin (Arg1 = val1, Arg2 = val2, Argn = valn);
10
Ejemplo:
Considerando la siguiente secuencia de llamadas a PintaPunto
Elipsis
Si el nmero de parmetros de una funcin es variable se utiliza la elipsis que se escribe as ..., y se coloca, detrs de los parmetros fijos. Los parmetros fijos se comprueban en compilacin y los variables en ejecucin. Ej. int func (char C, int I,...); // Esta funcin tiene dos parmetros
// fijos, de los dems no se sabe su nmero 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
12
Operador new
Es un operador de asignacin dinmica de memoria del montn (heap). Sintaxis: PunteroObjeto = new TipoObjeto[(Expresin)];
new asigna a PunteroObjeto memoria para almacenar un valor de tipo TipoObjeto. Devuelve la direccin de la memoria asignada o NULL si no existe espacio suficiente. Expresin puede tomar tres formas:
IES Nervin Dpto. Informtica M.Asuncin Criado 13
Operador new
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 pedir memoria para almacenar mltiples objetos. Si es un array, devolver la direccin 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
IES Nervin Dpto. Informtica M.Asuncin Criado
14
Es un operador no una funcin, por tanto no necesita prototipo, ni usa los recursos correspondientes a una funcin. No necesita usar casting. Se puede inicializar el objeto al pedir memoria. Llama automticamente al constructor por defecto para crear e inicializar los objetos.
IES Nervin Dpto. Informtica M.Asuncin Criado 15
Operador delete
Si PunteroObjeto es un objeto de una clase el operador delete llama automticamente al destructor por defecto.
IES Nervin Dpto. Informtica M.Asuncin Criado 16
Entrada/salida estndar
Para la entrada/salida de alto nivel a travs de streams se usa:
La librera 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 buffer. (objeto de ostream) Los operadores de flujo: Operador de insercin o flujo a la izquierda (salida) << Operador de extraccin o flujo a la derecha (entrada) >> Los manipuladores para E/S:
17
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 ; }
IES Nervin Dpto. Informtica M.Asuncin Criado
18
Ejemplos
int i= 36; cout << dec << i << << hex << i <<endl; // muestra 36 24 y salta lnea.
int i= 123; cout << setfill (-) << setw (6) << i <<endl; // muestra ---123 y salta lnea.
19
Especificador const
En C++ Las constantes simblicas tambin pueden definirse con el especificador const. Ejemplo: const float Pi = 3.1416;
// En C y 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 evalan en tiempo de ejecucin, por lo que no pueden usarse para dimensionar arrays. En C++ la evaluacin se realiza en tiempo de compilacin y, por tanto, pueden dimensionar arrays.
IES Nervin Dpto. Informtica M.Asuncin Criado 20
21