Anda di halaman 1dari 24

2012

FUNCIONES II
Ing. Jos Antonio Poma G.

FIEE

PROTOTIPOS DE UNA FUNCION

2012 FIEE -

C++ requiere que una funcin se declare antes de su uso. La declaracin de una funcin se denomina prototipo. Los prototipos de una funcin contienen la misma cabecera de la funcin, con la diferencia de que los prototipos terminan con un punto y coma. Especficamente el prototipo consta de las siguientes elementos: Nombre de una funcin, una lista de argumentos encerrados entre parntesis y un punto y coma. La inclusin del nombre de los parmetros es opcional.
C++ requiere que est declarada una funcin si se llama a esta funcin antes de que se defina.

PROTOTIPOS DE UNA FUNCION

2012

Sintaxis tipo_retorno nombre_funcion (lista_de_declaracion_parametros) tipo_retorno nombre_funcion tipo de valor devuelto por la funcion o palabra reservada void si no devuelve un valor nombre de la funcion lista de paratros de la funcion, separados por comas

lista_de_declaracion_parametros

FIEE

Un prototipo declara una funcin y proporciona una informacin suficiente al copilador para verificar que la funcin esta siendo llamada correctamente, con respecto al numero y tipo de los parmetros y el tipo devuelto de la funcin.

int max (int, int); //programa principal void main () { int m, n; do { cin >> m >> n, cout << max (m,n) <<endl; } while (m! = 0); } // devuelve el entero mayor int max (int x, int y); { if (x < y) return y; else return x; #include <iostream.h> double media (double x1, double x2); main () { med = media (num1, num2) } double media (double x1, double x2) } return (x1 + x2); }

//declaracin de max

CONCEPTO DE FUNCION

2012

//definicin de max

FIEE

// declaracin de media

//definicin

CONCEPTO DE FUNCION

FIEE

2012

CONCEPTO DE FUNCION

FIEE

2012

Si una funcin no tiene argumentos, se ha de utilizar la palabra reservada void como lista de argumentos del prototipo. int muestra (void);

PARAMETROS DE UN FUNCION

2012 FIEE -

C++ proporciona dos mtodos para pasar variables (parmetros) entre funciones. Una funcin puede utilizar, parmetros por valor y parmetros por referencia, o puede no tener parmetros. Esta seccin examina el mecanismo que C++ utiliza para pasar parmetros a funciones y como optimizar el paso de parmetros, dependiendo del tipo de dato que se utiliza . Suponiendo que se tenga la declaracin de una funcin circulo con tres argumentos.
void circulo (int x, int y, int dimetro); circulo (25, 40, vueltas *4);

PASO DE PARMETROS POR VALOR

2012 FIEE -

Paso por valor (tambin llamado paso por copia) significa que cuando C++compila la funcin y el cdigo que llama a la funcin. la funcin recibe una copia de los valores de los parmetros . Si se cambia el valor de un parmetro variable local, el cambio solo afecta a la funcin y no tiene efecto fuer a de la funcin.

PASO DE PARMETROS POR VALOR

2012

main () { int i =6; func_l ( i ) ; return; }

FIEE

func _1 (int i ) { Cout<<i; i++; Return; }

CONCEPTO DE FUNCION

2012

El mtodo por defecto de pasar parmetros es por valor, a menos que se pasen array se pasan siempre por direccin.

FIEE

TIPO DE DATOS DE RETORNO

FIEE

2012

PASO DE PARMETROS POR REFERENCIA

2012 FIEE -

Cuando una funcin debe modificar el valor del parmetro pasado y devolver este valor modificado a la funcin llamadora, se ha utilizar el mtodo de paso de parmetro por referencia o direccin. En este mtodo el compilador pasa la direccin de memoria del valor del parmetro a la funcin. Cuando se modifica el valor del parmetro (la variable local). Este valor queda almacenado en la misma direccin de memoria, por lo que al retornar a la funcin llamadora la direccin de la memoria donde se almaceno el parmetro contendr el valor modificado. Para declarar una variable parmetro como paso por referencia, el smbolo & debe preceder al nombre de la variable.

PASO DE PARMETROS POR REFERENCIA

2012 FIEE -

C++ permite utilizar punteros para implementar parmetros por referencia. Este mtodo es el utilizado en C y se conserva en C++ precisamente por cuestin de compatibilidad.
//mtodo de paso por referencia, mediante punteros // estilo C void intercambio (int * a, int * b ) { int aux =*a; *a = b; *b = aux; }

La funcin intercambio () utiliza las expresiones *a y *b para acceder a los enteros referenciales por las direcciones int de las variables I y j en la llamada de prueba siguiente:

PASO DE PARMETROS POR REFERENCIA

2012 FIEE -

int i= 3, j = 50; cout<< i = << i << y j = << j<<endl; intercambio (&I, &j ) ; cout<< i = << i << y j = << j <<endl;

La llamada a la funcin intercambio () debe pasar las direcciones de las variables intercambiadas. La versin de la funcin intercambio () que utiliza parmetros referencia es :
void intercambio (int& m, int& n) { Int aux =m; m= n; n = aux; }

RESULTADOS DE UNA FUNCION

2012 FIEE

Los parmetros m y n son parmetros por referencia. Por consiguiente cualquier cambio efectuado en el interior de la funcin se transmitir al exterior de la misma. Para llamar a la funcin intercambio(), por referencia simplemente se pasan las variables a intercambiar , i y j.
int i= 3, j = 50; cout<< i = << i << y j = << j<<endl; intercambio (i, j ) ; cout<< i = << i << y j = << j <<endl;

DIFERENCIA ENTRE LOS PARMETROS POR VALOR Y POR REFERENCIA

2012 FIEE -

Los parmetros valor(declarados sin &)reciben copias de los valores de los argumentos que se les pasan; La asignacin a parmetros valor de una funcin nunca cambian el valor del argumento original pasado a los parmetros. Los parmetros referencia (declarados con &) reciben la direccin de los argumentos pasados. En una funcin, las asignaciones a parmetros referencia cambian los valores de los argumentos originales.

DIFERENCIA ENTRE LOS PARMETROS POR VALOR Y POR REFERENCIA

2012

Por ejemplo, la escritura de una funcin intercambio () para intercambiar los contenidos de dos variables, requieren que los datos puedan ser modificados.
Llamado por valor intuno , dos ; intercambio1 (int primero, int segundo) { } llamada por referencia int uno, dos; Intercambio2 (int& primero, int& segundo) { }

FIEE

Solo en el caso de intercambio2 los valores de uno y dos se cambiarn.

FIEE -

2012

PARMETROS CONST DE UNA FUNCIN

2012 FIEE -

Con el objeto de aadir seguridad adicional a las funciones, se puede aadir a una descripcin de un parmetro el especificador const, que indica al compilador que solo es de lectura en el interior de la funcin. Si se intenta escribir en este parmetro se producir un mensaje de error de compilacin.
void falso ( constinttem, const cha& car) { item = 123; //fallo en tiempo de compilacin car = A //fallo en tiempo de compilacin }

PASO DE PARMETROS EN C++

2012

PARAMETRO ESPECIFICADO COMO:

ITEM PASADO POR:

CAMBIA ITEM DENTRO DE LA FUNCIN

MODIFICA PARMETROS AL EXTERIOR

int item const int item int& item const int& item

valor valor referencia referencia

S No S No

No No Si No

FIEE

ARGUMENTOS POR OMISIN

2012 FIEE -

Cuando una funcin tiene un cierto nmero de parmetros ,normalmente el mismo nmero de argumentos deben indicarse cuando se llama a la funcin. En C++, sin embargo, es posible omitir algn argumento. Una caractersticas poderosa de las funciones de C++ es que en ellas puede establecer valores por omisin o ausencia (por defecto) para los parmetros. Se pueden asignar argumentos por defecto a los parmetros de una funcin. Cuando se omite el argumento de un parmetro que es un argumento por defecto, se utiliza automticamente ste. La nica restriccin es que se deben incluir todas las variables desde la izquierda hasta el primer parmetro omitido.

ARGUMENTOS POR OMISIN

2012 FIEE -

Si se pasan valores a los argumentos omitidos, se utiliza ese valor; si no se pasa un valor a un parmetro opcional, se utiliza el valor por defecto como argumento. El valor por defecto debe ser una expresin constante.
Otro ejemplo es la funcinfuncdef () Char funcdef (int arg1=1, char c=A, float f_val=45.7f); Se puede llamar a funcdef con cualquiera de las siguientes sentencias: funcdef (9 z,91.5) //Anula los tres argumentos por defecto funcdef(25, W) ; //Anula los dos primero argumentos funcdef(50) ; //Anula el primer argumento funcdef () ; //Utiliza los tres argumentos por defecto Las sentencias anteriores son equivalentes a: funcdef (9, z, 91.5); funcdef (25, W) ; funcdef (50, A, 45.7) ; funcdef (1, A, 45.7);

ARGUMENTOS POR OMISIN

2012 FIEE -

Otro ejemplo es la funcinfuncdef () // Muestra el uso de valores de parmetros por defecto #include <iostream> using namspace std; void f(int a = 10, int b=20, int c = 30) { cout <<a = <<a <<end1; <<b = << b<<end1; <<c = << c <<end1; } void main(void) { f(); f(1); f(1, 5); f(1, 2, 3); cout << Pulse Intro (Enter) para continuar; cin.get(); }

CONCEPTO DE FUNCION

FIEE

2012

Aunque no es obligatorio el uso de la sentencia return en la ultima lnea, se recomienda su uso, ya que ayuda a recordar el retorno en ese punto a la funcin llamadora.

Anda mungkin juga menyukai