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 función puede hacer. Si andan perdidos en cuanto a funciones les recomiendo leer mi post anterior: Funciones en C++.

Una función, como les decía, 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

Vamos a hacer un programa que sume dos números, usando los cuatro tipos de funciones:

No reciben ni retornan

Las más sencillas. Para usarlas sólo tenemos que saber cómo crearlas y cómo llamarlas. Una función 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 función: cualquiera que empiece con una letra, que sea significativo y que no sea una palabra reservada.

Para llamarlas sólo hay que escribir el nombre de la función seguido de sus paréntesis y un punto y coma (;).
nombre();

Así nuestro programa sería:

#include
using namespace std;

void sumar()
{
    int num1, num2, r;
    cout <> num1;
    cout <> num2;
    r = num1 + num2;
    cout << "La suma es " << r;
}

int main()
{
    sumar();
}

Como ven, todo lo que habríamos puesto en nuestro main mejor los pusimos en una función y desde el main la llamamos. Una función siempre, siempre, siempre tiene que ir antes del main.

Una función de este tipo que hemos usado muchas veces es getch();

Reciben y No Retornan

¿Cómo haríamos para pedir los dos números en el main y que la función haga la suma? Para eso tenemos que hacer una función 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 paréntesis tenemos otros aspectos:

‘tipo_var1’ se refiere al tipo de la variable que nuestra función 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.

Para llamar la función hay que poner la variables que vamos a enviar dentro del paréntesis en el mismo orden en que las declaramos en la función:
nombre(var1, var2);

Nuestro programa quedaría así:

#include
using namespace std;

void sumar(int num1, int num2)
{
    int r;
    r = num1 + num2;
    cout << "La suma es " << r;
}

int main()
{
    int num1, num2;
    cout <> num1;
    cout <> num2;
    sumar(num1, num2);
}

Pedimos los dos números en el main, los enviamos a la función, ésta los suma y los muestra.

Una función de este tipo que hemos usado muchas veces es el odiado por muchos, amados por otros, gotoxy(x,y);

Retornan y No Reciben

¿Y si ahora queremos lo contrario? Pedir los números en la función, pero mostrar el resultado en el main. Para eso necesitamos una función que retorne.

Recibir es enviar datos del main a la función. Retornar es enviar datos de la función al main. Para retornar datos hay que hacer dos cosas: no usar void como tipo y usar return.

De forma general:
tipo nombre() { return var; }
El ‘tipo’ tiene que ser del tipo de variable que queremos retornar, si nuestra variable retorna una variable int, pues el tipo de la función es int.

Para indicar qué variable estamos retornando usaremos la palabra return seguido de la variable. Usualmente esto va al final de la función.

Para llamar a la función hay que preparar un colchón en donde caiga la variable que está retornando.
var = nombre();
La variable que está retornando nuestra función se va a almacenar en la variable ‘var’. Este es un buen momento para recordarles que las variables declaradas entre dos llaves {} únicamente existen entre esas dos llaves. O sea que la variable ‘var’ de la función no es la misma que la variable ‘var’ de la función; sin embargo la var del main está adquiriendo el valor de la var del main. Un poco confuso lo se, no se preocupen.

Nuestro programa quedaría así:

#include
using namespace std;

int sumar()
{
    int num1, num2, r;
    cout <> num1;
    cout <> num2;
    r = num1 + num2;
    return r;
}

int main()
{
    int r;
    r = sumar();
    cout << "La suma es " << r;
}

¿A alguien se le ocurre una función conocida de este tipo?

Reciben y Retornan

Ahora queremos que nuestra función únicamente sume, el main se va a encargar de pedir los números y sumar los resultados. Para eso necesitamos que nuestra función reciba las variables y además retorne el resultado. ¡Wow! ¿Es acaso eso posible? Claro que sí.

Es sólo cuestión de combinar las funciones que reciben y no retornan con las que retornan y no reciben.

Nuestro programa quedaría así:

#include
using namespace std;

int sumar(int num1, int num2)
{
    int r;
    r = num1 + num2;
    return r;
}

int main()
{
    int num1, num2, r;
    cout <> num1;
    cout <> num2;
    r = sumar(num1, num2);
    cout << "La suma es " << r;
}

Las funciones de la librería math.h son en su mayoría de este tipo. sqrt(); pow(); sin();

En principio puede parecer que las funciones sirven únicamente para organizar el código, lo cual es cierto, pero no sólo eso. ¿Se imaginan si tuviéramos que escribir todo el código detrás de un simple gotoxy();? Ah verdad…

Bueno, no me iba a quedar tranquilo si no les mostraba la versión optimizada de la última función:

#include
using namespace std;

int sumar(int num1, int num2)
{
    return num1 + num2;
}

int main()
{
    int num1, num2;
    cout <> num1;
    cout <> num2;
    cout << "La suma es " << sumar(num1, num2);
}

😀

43 thoughts on “Tipos de funciones en C++

  1. Pongo exactamente lo que dice ahi, en un fichero en blanco y no funciona, da muchos errores no se si es que el que hizo el post esta oviando alguna cosa, que por supuesto yo no se,,,

  2. quisiera saber porque los ficheros.exe que genera el devc++ el antivirus los reconoce como virus troyano generic24.
    Muchas gracias…

  3. excelente hermano que mejor explicación que esta muy bueno tu blog. felicitaciones. tengo rato buscando explicación y esta es la mejor.

  4. Hola men me gusto mucho tu blog es muy interesante la informacion que pusiste quisiera saber donde puedo encontrar ejercicios sobre esto no podrias darme tu email para hablar mas claramente Gracias😀

  5. hola amigo una pregunta en el caso de las librerias yo estoy usando stdio y conio esto varia en la codificacion y si este fuera el caso, como tendria que ser el ejercicio te agradesco de ante mano y felicidades

  6. Hoy estuve repasando unos ejercicios y me surgió una duda:
    ¿Como le hago para que una función me retorne un arreglo y así lo pueda usar en la función main, al igual que una función reciba un arreglo de la función main? Ya lo intente y no me sale😦

  7. Excelente tu blog!! Te felicito!

    Me ha ayudado bastante durante mi iniciación en la programación aunque si es complicado.
    Podrías recomendarme algún manual o instructivo sobre el uso de las funciones en C++?

    Muchas gracias.

  8. Muchas gracias que manera de explicar, una forma muy didactica ya que tiene los ejemplos, no lo habia encontrado asi en ninguna parte.

  9. hola, quería saber como hago para tomar solo una variable de las que retorna mi funcion, ejemplo:

    void declarar()
    {
    int a=0;
    int b=232;
    }

    de esa funcion quiero igualar una variable x a la variable “b” que tiene adentro. Gracias.

  10. hola hola pues esta muy bien este bolg ya que puede ayudar a mucha gente sobre dudas al respecto , gracias

  11. que te puedo desir son buenos pero le hace como faltica unas videos donde se haga mas esplisito lo que tratan de dar a entender ok espero sirva de algo esta propuesta ok

  12. lo unico es que no colocas todas las demas librerias como;

    #include
    #include
    #include
    que son las que trabajan con el cout y e cin y tambien un return 0;
    y el gerch(); antes delñ retun. pero gracias me ayudastes mucho,,,,,,

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s