31. C++ || Funciones parámetros
Al trabajar con una función, al momento de ser llamada para cumplir con su tarea, debemos enviar la cantidad necesaria de parámetros que necesite, esto a menos que la función no tenga parámetros. C++ proporciona dos formas de pasar los parámetros: parámetros por valor y parámetros por referencia. Así, si la función que sigue tiene tres parámetros:
circulo(int x, int y, int diametro);
Al momento de ser llamada desde cualquier parte del programa, debemos pasar los parámetros de la misma forma que fueron establecidos y con la cantidad exacta, por ejemplo:
circulo(20, 50, 3*datos);
Los parámetros que se envía a una función pueden ser viables, constantes o una expresión.
Parámetros por valor
También se les conoce como paso por copia. Cuando se utiliza un parámetro por valor, C++ lo que hace es enviar una copia de los valores introducidos en los parámetros, esto significa que los cambios que le ocurra a esos valores sólo serán afectados dentro de la función, con esto queremos decir que el valor que se envía no se modifica fuera de la misma. Por ejemplo:
#include <iostream> using namespace std; //Prototipo de la función. void MiFuncion(int n); int main() { int x = 7; cout<<"Variable antes de utilizar la funcion = "<<x<<endl; //Llamada de la función, como recibe un sólo parámetro, enviamos un sólo valor. MiFuncion(x); cout<<"Variable despues de la llamada de la funcion = "<<x<<endl; return 0; } //Definición de la función. void MiFuncion(int n) { cout<<"Variable dentro de la funcion = "<<n<<endl; n = 100; cout<<"Variable luego de ser modificada en la funcion = "<<n<<endl; }
Este código produce la siguiente salida:
Variable antes de utilizar la funcion = 7
Variable dentro de la funcion = 7
Variable luego de ser modificada en la funcion = 100
Variable despues de la llamada de la funcion = 7
Como pueden ver, la variable sólo se modifica dentro de la función, pero no fuera de ella, esa es la diferencia que tiene con el paso por referencia.
Parámetros por referencia
Cuando se pasa un valor por referencia, C++ lo que hace es enviar la dirección de memoria de la variable, esto quiere decir que cualquier cambio efectuado a la variable dentro de la función, tiene el mismo efecto fuera de ella. Por ejemplo, si queremos modificar el valor del parámetro pasado, lo haríamos de la siguiente forma:
void intercambio(int& a, int& b) { int aux = a; a = b; b = aux; }
La función intercambio utiliza el signo de & para acceder a la dirección de memoria de los valores pasados por los parámetros. Para hacer uso de esta función tendríamos que llamarla de la siguiente manera:
int i = 3, j = 7;
cout<<"i = "<<i<<" y "<<"j = "<<j;
intercambio(i, j);
cout<<"i = "<<i<<" y "<<"j = "<<j;
Los parámetros a y b son parámetros por referencia, lo que implica que cualquier cambio que se haga en el interior de la función se transmitirá al exterior de la misma.
Diferencias entre paso por valor y paso por referencia
Las diferencias que hay entre un parámetro por valor y uno por referencia son:
- Los parámetros por valor reciben copias de los valores de los argumentos que se les pasan.
- Los parámetros por valor sólo modifica los valores que se le pasan dentro de la función y no fuera de ella.
- Los parámetros por referencia reciben la dirección de memoria de los argumentos pasados.
- Los parámetros por referencia modifican los valores que se le pasan dentro y fuera de la función.
- Los parámetros por referencia hacen uso del símbolo & en la cabecera del prototipo de la función y en la cabecera de la definición de la función.
Nota: por defecto, los parámetros se pasan por valor a excepción de los arrays, los arrays siempre se pasan por referencia.
En Aprender a Programar PRO!! Sentimos la necesidad de aclarar lo siguiente:
El nombre de los parámetros en el prototipo y en la definición de la función puede ser cualquiera que tú desees, lo que debes tener en cuenta es que el nombre que indiques en el prototipo de la función debe ser el mismo que pongas en la definición. Por ejemplo:
//Prototipo de la función int LeerDatos(int edad, float altura, float peso); int main() { //Líneas de codigo . . . } //Definición de la función int LeerDatos(int edad, float altura, float peso) { //Líneas de codigo . . . }
Publica un comentario