Skip to content

Funciones cpp

RDLL edited this page Aug 11, 2023 · 4 revisions

Funciones

#include <iostream>

using namespace std;

//Declaración o prototipo de función
int suma(int a, int b);

int main(){
    int a,b;
    cout << "Ingresa dos enteros: \n";
    cin >> a >> b;
    cout << "La suma es: " << suma(a,b);
    cout << endl;
}

//Definción de la función
int suma(int a,int b){
    return a + b;
}

Prototipo de función

No es obligatorio hacerlo de esta manera, pero si ayuda a mantener más entendible el código.

Si nos damos cuenta lo primero que vemos en el código de arriba, es que después de definir el namespace a utilizar, vemos una porción de código, esta porción de código es la declaración o prototipo de función, de esta manera le decimos al compilador que existe o vamos a una tener una función llamada suma de tipo entero y que recibe como parámetros dos enteros.

Para definir una función se hace de la siguiente manera

tipo nombre(parametros);

Definición de la función

Aquí se pone lo que hace la función, se trata de mantener separado la definición y la declaración para que el código seas mas limpio y legible, también pueden estar contenidas en archivos separados, esto se verá más adelante, es mas una cuestión de estética, pero que en códigos enormes se aprecia mucho.

Por lo que en vez de poner el prototipo podemos poner diretamente la definición.

Tipo de la función

Al igual que las variables, las funciones también tienen tipos, que son los mismos de las variables, int, float, double, char, bool y void, hay mas tipos de datos pero son mas para propósitos específicos.

Todos los datos salvo void nos devuelven un valor del tipo al que hacen referencia, aquí return toma cierta relevancia.

Si vemos en la definición de la función

int suma(int a,int b){
    return a + b;
}

Tenemos nuevamente return, aquí la función retorna directamente el valor de la suma, ya que también podríamos crear una variable y guardar el resultado ahí.

Si queremos retornar float definimos la función como tipo float , y así con cada tipo, si no queremos retornar nada, hay que definirla como tipo void.

Los valores retornados por una función se pueden guardar en otra variable o usarse directamente en el flujo de salida.

Parámetros

Son los tipos de datos o variables que va a recibir la función al momento de llamarla, puede contener mas de un parámetro o no contener ninguno, los parámetros también pueden ser arreglos.

Parámetros por defecto

Son parámetros a los que les definimos un valor en caso de que uno de los parámetros no se manden a la función cuando sea llamada.

#include <iostream>

using namespace std;

//Declaración o prototipo de función
int suma(int a = 3, int b = 5;

int main(){
    int a,b;
    cout << "Ingresa un entero: \n";
    cin >> a;
    cout << "La suma es: " << suma(a);
    cout << endl;
}

//Definción de la función
int suma(int a = 3,int b = 5){
    return a + b;
}

Al llamar a la función, no le pasamos el parámetro b, normalmente daría error pero al darle un valor por defecto, cuando se ejecute la función tomara ese valor, de esta manera podemos asegurar que la función se ejecute en caso de no mandar correctamente los parámetros.

Parámetros por valor

Cuando se pasa un parámetro por valor, simplemente se pasa una copia de la variable, de manera que aunque pareciera ser que se modifica en la función realmente no es así, solo se modifico la copia pero no la variable original, aquí entra en juego el ámbito local.

Sino agregamos ningún tipo de operador, los parámetros se pasan por valor

int suma(int a, int b);

Parámetros por referencia

Cuando se pasa un parámetro por referencia en realidad le estamos pasando su dirección de memoria, de momento no nos centremos tanto en la memoria; en realidad estamos mandando la variable original, por lo que si la modificamos en la función, aquí si estaremos modificando su valor original.

Si pasamos un arreglo o una matriz a una función, siempre se pasa por referencia.

Para pasar por referencia hay que usar el operador de dirección &.

int suma(int &a, int &b);
.
.
.
cout << "La suma es: " << suma(a,b);

Ambito local

Aquí vuelve a aparecer el famoso ámbito local, si en la función suma declaramos una variable, esa variable solo será utilizable y conocida dentro de la función y cuando la función retorne o digamos el programa regrese a la función principal, todo lo contenido dentro de la función suma no podrá ser utilizado por la función principal ni por otra función.

.
.
cout << "La suma es: " << suma(a,b) << c;
.
.
int suma(int a,int b){
    int c = a+b;
    return a;
}

Aunque la variable c esta definida en la función suma no lo está en la función principal, ya que el ámbito en el que se encuentra definidad la variable c es el ámbito de la función suma y solo puede ser utilizada ahí, por lo que el código nos daría error.

Introducción Funciones anónimas Recursividad Macros Apuntadores