Está en la página 1de 39

Funciones en C++

Fundamentos de
Programación
Contenidos
• Concepto de función y su utilización

• Declaración y definición de funciones en C++:


▫ Prototipos
▫ Llamadas
▫ Implementación
▫ Parámetros formales y actuales
▫ Resultados

• Intercambio de información entre el cliente y la función


▫ Pasaje por valor
▫ Pasaje por referencia
▫ Parámetros por defecto
Subprogramas

• Los subprogramas se implementan en respuesta al


diseño modular

• Su principal objetivo consiste en facilitar la


depuración de errores en el software y en facilitar la
reutilización de componentes de software para
lograr mayor productividad
Subprogramas
• Reducir la complejidad del programa y lograr mayor
modularidad.

• Permitir y facilitar el trabajo en equipo. Cada diseñador puede


atacar diferentes módulos o subprogramas.

• Facilitar la prueba de un programa, ya que cada subprograma


puede ser probado previamente y en forma independiente.

• Optimizar el uso y administración de memoria.

• Reutilización de código. Crear librerías de subprogramas para


su posterior reutilización en otros programas.
Subprogramas

• Todos los lenguajes de programación admiten


subprogramas.

• Se los denomina funciones, procedimientos,


subrutinas.

• C++ emplea el subprograma función


Principal Principal

inicio inicio

acción 1
acción 2 Proceso A
...

acción n
acción n+1 Proceso B
...

fin fin
Principal Proceso A Proceso B

inicio inicio inicio

acción 1 acción n
Proceso A acción 2 acción n+1
... ...

Proceso B
fin fin

fin
Subprogramas
inicio inicio

fin fin
Subprogramas
Subprogramas
Prototipo

tipo nombre_funcion (tipo param1, tipo param2,...);


Prototipo

tipo nombre_funcion (tipo param1, tipo param2,...);

Sirve para indicar al compilador los tipos de retorno y


los de los parámetros de una función, de modo que
compruebe si son del tipo correcto cada vez que se
use esta función dentro del programa.
Prototipo

/* Ejemplo del prototipo de una


función en C++ para calcular el
volumen de un cilindro.
Se ingresan como datos de entrada su
radio (r) y altura (h) */

float vol_cilindro(float r, float a);


Prototipo

/* Ejemplo de prototipo de una


función en C++ que no devuelve
resultado.
La función recibe un código de error
e informa el mismo */

void InformaError(int CodigoError);


Prototipo

/* Ejemplo de prototipo de una


función en C++ que no devuelve
resultado.
La función recibe un código de error
e informa el mismo */

void InformaError(int CodigoError);


Llamada

int main() {

...

var = nombre_funcion(p1,p2,...);

...

return 0;
}
Llamada
float vol_cilindro(float r, float a);

int main() {
float radio, altura, volumen;

cout << "Ingrese el radio: " ;


cin >> radio;

cout << "Ingrese la altura: ";


cin >> altura;

volumen = vol_cilindro (radio, altura);

cout << "El volumen es: " << volumen;

return 0;
}
Parámetros formales y actuales
float vol_cilindro(float r, float a);

int main() {
float radio, altura, volumen;

cout << "Ingrese el radio: " ;


cin >> radio;

cout << "Ingrese la altura: ";


cin >> altura;

volumen = vol_cilindro (radio, altura);

cout << "El volumen es: " << volumen;

return 0;
}
Parámetros formales y actuales
float vol_cilindro(float r, float a);

Parámetros formales
int main() { o de diseño
float radio, altura, volumen;

cout << "Ingrese el radio: " ;


cin >> radio;
Parámetros actuales
cout << "Ingrese la altura: "; o de llamada
cin >> altura;

volumen = vol_cilindro (radio, altura);

cout << "El volumen es: " << volumen;

return 0;
}
Implementación
tipo nombre_funcion (tipo param1, tipo param2,...)

{ // código de la función

return resultado; }
Implementación
tipo nombre_funcion (tipo param1, tipo param2,...)

{ // código de la función

return resultado; }
Implementación

float vol_cilindro(float r, float a){

float v = M_PI*r*r*a;

return v; }
Prototipo
Llamada
Implementación
Resultados de una función
int suma3(int x1, int x2, int x3);

float promedio3(int, int, int);

char condicion_cursado(int n1, int n2);

struct fraccion {int num, den;};

fraccion suma (fraccion x1,fraccion x2);


Resultados de una función

Una función puede retornar un único valor

return
Resultados de una función

Una función puede retornar un único valor

return

return v;
return M_PI*r*r*a;
Resultados de una función

Si el tipo de la función es void

• return;

• Se puede omitir la sentencia return


Resultados de una función
• float vol_cilindro(float r, float a){
float v = M_PI*r*r*a;
return v; }

• float vol_cilindro(float r, float a){


return M_PI*r*r*a; }

• void vol_cilindro(float r, float a){


float v = M_PI*r*r*a;
cout<<"El volumen del cilindro es: "<<v<<endl;
}
No deseable
Intercambio de información entre el
cliente y la función

• Pasaje por valor

• Pasaje por referencia

• Parámetros por defecto


Pasaje por valor

• En
La el
función
pasaje recibe una copia
de parámetros porde lossevalores
valor producedeuna
los
parámetros
asignación o copia de los parámetros de llamada o
actuales a los parámetros de diseño o formales
•.
Pasaje por valor

• En
La el
función
pasaje recibe una copia
de parámetros porde lossevalores
valor producedeuna
los
parámetros
asignación o copia de los parámetros de llamada o
actuales a los parámetros de diseño o formales
•.

Si se modifica un parámetro formal dentro de la


función, los correspondientes parámetros actuales
no se verán afectados.
Pasaje por valor
float vol_cilindro(float r, float a);

int main() {
float radio, altura, volumen;
cout << "Ingrese el radio: " ; cin >> radio;
cout << "Ingrese la altura: "; cin >> altura;

volumen = vol_cilindro (radio, altura);

cout << "El volumen es: " << volumen;


return 0; }
r y a, parámetros formales,
son asignados en la
float vol_cilindro(float r, float a){
llamada:
float v = M_PI*r*r*a; r = radio
return v; } a = altura
Pasaje por referencia

En el pasaje de parámetros por referencia cada


parámetro actual es un alias del parámetro formal o
de diseño
(comparten la misma dirección de memoria)

Si se modifica un parámetro formal dentro de la


función, se está modificando simultáneamente el
parámetro actual del módulo cliente que invocó a la
función
Pasaje por referencia

• Operador de dirección &

int m=10;

int &q = m; // q es definido como alias de m

q++; // se incrementa q en 1 y también m

cout << m; // se obtiene 11 como salida


Pasaje por referencia
float vol_cilindro(float r, float &a);

int main() {
float radio, altura, volumen;
cout << "Ingrese el radio: " ; cin >> radio;
cout << "Ingrese la altura: "; cin >> altura;

volumen = vol_cilindro (radio, altura);

cout << "El volumen es: " << volumen;


return 0; }
El parámetro r es asignado
float vol_cilindro(float r, float &a){ con el valor r = radio
float v = M_PI*r*r*a; Mientras que a es un alias
return v; } de altura
Parámetros por defecto

Es posible omitir un parámetro en la llamada a la


función, si se establecen parámetros por defecto o
argumentos por omisión.

float vol_cilindro(float r, float h = 10.0);

int main() {
...

volumen = vol_cilindro (radio, altura);


...

return 0; }
Parámetros por defecto
• Cuando se omite un parámetro por defecto, se utiliza
automáticamente el valor establecido.

• Si se pasan valores a un parámetro por defecto, se utiliza


ese valor de llamada

• El valor por defecto debe ser una expresión constante.

• Los parámetros por defecto deben situarse siempre a la


derecha.

• No se puede omitir un argumento a menos que se


omitan todos los parámetros a su derecha.

También podría gustarte