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<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:
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;
}
Ordenar arreglo
de manera ascendente o descendente
(burbuja)
¿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);
}
No hay comentarios.:
Publicar un comentario