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:
- No reciben ni retornan
- Reciben y no retornan
- No reciben y retornan
- 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<iostream> using namespace std; void sumar() { int num1, num2, r; cout << "Numero 1: "; cin >> num1; cout << "Numero 2: "; cin >> 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<iostream> 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 << "Numero 1: "; cin >> num1; cout << "Numero 2: "; cin >> 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<iostream> using namespace std; int sumar() { int num1, num2, r; cout << "Numero 1: "; cin >> num1; cout << "Numero 2: "; cin >> 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<iostream> using namespace std; int sumar(int num1, int num2) { int r; r = num1 + num2; return r; } int main() { int num1, num2, r; cout << "Numero 1: "; cin >> num1; cout << "Numero 2: "; cin >> 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<iostream> using namespace std; int sumar(int num1, int num2) { return num1 + num2; } int main() { int num1, num2; cout << "Numero 1: "; cin >> num1; cout << "Numero 2: "; cin >> num2; cout << "La suma es " << sumar(num1, num2); }
:D