Está en la página 1de 21

Unidad 15

Caractersticas de C++ no relacionadas con el DOO

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.

IES Nervin Dpto. Informtica M.Asuncin Criado

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.

6. E/S estndar CON STREAMS.


6.1 Formatos. 6.2. Manipuladores.

7. EL ESPECIFICADOR const.

IES Nervin Dpto. Informtica M.Asuncin Criado

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

Otros que metodolgicamente no aportan beneficios:


Otros diseados con filosofa OO:


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:

Funcin miembro de clase


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; }

IES Nervin Dpto. Informtica M.Asuncin Criado

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:

Uso de funciones inline

Usar:

En funciones de cdigo corto y alto nmero de llamadas.

No usar, porque ser desestimada:


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.

Si el compilador no la va a considerar inline dar un mensaje de aviso.


IES Nervin Dpto. Informtica M.Asuncin Criado 8

Argumentos con valores por defecto

Caractersticas:

A los parmetros de una funcin puede asignrseles valores por defecto.

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.

IES Nervin Dpto. Informtica M.Asuncin Criado 9

Argumentos con valores por defecto

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);

IES Nervin Dpto. Informtica M.Asuncin Criado

10

Ejemplo:
Considerando la siguiente secuencia de llamadas a PintaPunto

void PintaPunto (int x, int y, int z = 0);


Correcto, si se llama PintaPunto(3,2), la funcin se ejecuta con (3,2,0)

void PintaPunto (int x, int y, int z =5);


Incorrecto, por redefinicin de z, antes se defini 0

void PintaPunto (int x = 3, int y, int z);


Incorrecto, deben definirse tambin los argumentos que van detrs si no han sido inicializados, en este caso y, pues z ya est definido antes.

void PintaPunto (int x, int y = 1, int z);


Correcto, si se llama PintaPunto(5), la funcin se ejecuta con (5,1,0).
IES Nervin Dpto. Informtica M.Asuncin Criado 11

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

IES Nervin Dpto. Informtica M.Asuncin Criado

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

Expresin 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 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

Diferencias con malloc

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

Es un operador de devolucin de memoria dinmica. Sintaxis:


delete PunteroObjeto; o bien en caso de arrays delete [ ] PunteroObjeto; // para los tipos estndares 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 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:

con argumentos (iomanip.h). Sin argumentos (iostream.h).


IES Nervin Dpto. Informtica M.Asuncin Criado

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.

Ver pag. 543-545

IES Nervin Dpto. Informtica M.Asuncin Criado

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++

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 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

Descansar demasiado es oxidarse

Sir Walter Scott Escritor(1771-1832).

IES Nervin Dpto. Informtica M.Asuncin Criado

21

También podría gustarte