Está en la página 1de 5

Tipos de funciones en c++

Los tipos de funciones en c++ son 4, aunque en realidad son las combinaciones de
las 2 cosas que una funcin puede hacer. Si andan perdidos en cuanto a funciones
les recomiendo leer mi post anterior: Funciones en C++.

Una funcin, como les deca, puede hacer (o no) dos cosas: 1 Recibir datos y 2
Retornar datos. De esto surgen los cuatro tipos de funciones:

1. No reciben ni retornan
2. Reciben y no retornan
3. No reciben y retornan
4. Reciben y retornan

Paso de parmetros a una funcin

Utilizando la lista de argumentos podemos pasar parmetros a una funcin. En esta


lista se suele colocar un conjunto de identificadores, separados por comas, que
representan cada uno de ellos a uno de los parmetros de la funcin. Obsrvese
que el orden de los parmetros es importante. Para llamar a la funcin habr que
colocar los parmetros en el orden en que la funcin los espera.

Cada parmetro puede tener un tipo diferente. Para declarar el tipo de los
parmetros aadiremos entre el parntesis ')' y la llave '{' una lista de declaraciones,
similar a una lista de declaraciones de variables. Es habitual colocar cada par metro
en una lnea, tabulados hacia la derecha. As:

imprime(numero, letra)
int numero;
char letra;
{
printf("%d, %c\n", numero, letra);
}

Es una funcin que admite dos variables, una entera y otra de tipo carcter.

En los lenguajes de programacin estructurada hay dos formas de pasar variables


a una funcin:

por referencia, o
por valor

Cuando la variable se pasa por referencia, la funcin puede acceder a la variable


original. Este enfoque es habitual en lenguajes como el Pascal. En C, sin embargo,
todos los parmetros se pasan por valor. La funcin recibe una copia de los
parmetros y variables, y no puede acceder a las variables originales. Cualquier
modificacin que efectuemos sobre un parmetro no se refleja en la variable
original. Esto hace que no podamos alterar el valor de la variable por equivocacin.

Sin embargo, en determinadas ocasiones necesitaremos alterar el valor de la


variable que le pasamos a una funcin. Para ello en el C se emplea el mecanismo
de los punteros.

Funcin que devuelve un valor

Cuando la funcin finaliza hemos dicho que se devuelve un valor. Este valor en
principio no est definido, es decir, puede devolver cualquier cosa. Para obligar a la
funcin a retornar un determinado valor se utiliza la sentencia return, seguida del
valor a retornar. Como todas las sentencias en C se debe acabar con un ';'. Por
ejemplo:

lista()
{
return 1;
}

Devuelve el entero 1 cada vez que es llamada. En C podemos devolver cualquier


tipo de datos de los llamados escalares. Los tipos de datos escalares son los
punteros, tipos numricos y el tipo carcter. En C no se pueden devolver vectores
(array) ni estructuras.

Funcin que recibe y retorna un valor


Es slo cuestin de combinar las funciones que reciben y no retornan con las que
retornan y no reciben.

Este ejemplo es como el anterior pero devuelve como resultado el mayor de los dos
nmeros.

#include <stdio.h>

main()
{
int num1, num2;
int resultado;

printf( "Introduzca dos nmeros: " );


scanf( "%i %i", num1, num2 );

resultado = compara( num1, num2 ); /* Almacenamos en


resultado el valor
que devuelve la
funcin */

printf( "El mayor de los dos es %i\n", resultado );


}
int compara( int a, int b ) /* Metemos los parmetros a y b a la
funcin */
{
int mayor; /* Esta funcin define su propia
variable;
esta variable slo se puede usar aqu
*/
if ( a>b )
mayor = a;
else
mayor = b;

return mayor;
}

En este ejemplo podamos haber hecho tambin:

printf( "El mayor de los dos es %i\n", compara( num1, num2 ) );

De esta forma nos ahorramos tener que definir la variable resultado.

Funcin que recibe y no retorna:

Cmo haramos para pedir los dos nmeros en el main y que la funcin haga la
suma? Para eso tenemos que hacer una funcin capaz de recibir datos, entonces
la sintaxis cambia un poco:
tipo nombre (tipo_var1 nombre_var1, tipo_var2 nombre_var2){}
tipo y nombre se refieren a lo mismo y como no retorna el tipo siempre es void.

Dentro del parntesis tenemos otros aspectos:

tipo_var1 se refiere al tipo de la variable que nuestra funcin va a recibir.

nombre_var1 se refiere al nombre de esa variable.

Si queremos recibir una variable hasta ah es suficiente, si queremos otra variable


ponemos una coma (,) y declaramos la siguiente variable.

En este ejemplo la funcin compara toma dos nmeros, los compara y nos dice cul
es mayor.

#include <stdio.h>

void compara( int, int);

main()
{
int num1, num2;

printf( "Introduzca dos nmeros: " );


scanf( "%i %i", &num1, &num2 );

compara( num1, num2 ); /* Llamamos a la funcin con sus dos


argumentos */
}

void compara( int a, int b ) /* Pasamos los parmetros a y b a la


funcin */
{
if ( a>b )
printf( "%i es mayor que %i\n" , a, b );
else
printf( "%i es mayor que %i\n", b, a );

return;
}

Funcin que recibe:


Las ms sencillas. Para usarlas slo tenemos que saber cmo crearlas y cmo
llamarlas. Una funcin se crea de esta forma general:
tipo nombre () {}.
El tipo se refiere al tipo de dato (int, float, void, char) y en las funciones que no
retornan siempre es void.

El nombre es el nombre de la funcin: cualquiera que empiece con una letra, que
sea significativo y que no sea una palabra reservada.

Para llamarlas slo hay que escribir el nombre de la funcin seguido de sus
parntesis y un punto y coma (;).
nombre ();

Este programa llama a la funcin borra_pantalla que despeja la pantalla mediante


la orden clrscr() (clear screen) y muestra el mensaje "la pantalla est limpia". Por
supuesto, es de nula utilidad pero sirve para empezar.

#include <stdio.h>
#include <conio.h>

void borra_pantalla();

main()
{
borra_pantalla(); /* Llamamos a la funcin */
}

void borra_pantalla() /* No se debe poner punto y coma aqu


*/
{
clrscr();
printf( "La pantalla est limpia\n" );

return; /* No hace falta devolver ningn valor,


mucha gente ni siquiera pone este return */
}