Argumentos por valor y por referencia en C++ ... Las referencias como un Alias

Siguiendo con el tema de las funciones en C++, generalmente cuando definimos una funcion, que utiliza algun argumento, en nuestros programas lo hacemos de la siguiente manera:

          int cuadrado(int );

         int main()
        {
               int numero=2;//numero que vamos a elevar al cuadrado.
               cuadrado(numero); // llamada a la funcion con la variable "numero" como parametro.
                .....
Lo que estamos haciendo en esa declaración de prototipo de función, es decirle al compilador de C++ que para poder utilizar la función "cuadrado", necesitamos un dato de entrada de tipo entero (lo que esta entre parentesis), el asunto aqui es que dicho argumento entero lo estamos pasando a la función "cuadrado" por valor, ¿que significa eso?, bueno que en realidad, la variable "número", NO es modificada por la funcion "cuadrado" sino que cuando se efectua el llamado a la funcion se genera una COPIA de la variable "numero" con el mismo VALOR que la original, y es con esta con la que la función va a trabajar. 


La desventaja que existe al  utilizar argumentos por valor , que como se genera una copia temporal exacta, de la variable original, en realidad estamos DUPLICANDO informacion, lo cual puede acarrear problemas de rendimiento en tiempo de ejecucion.

Para tratar de resolver esta desventaja, se utilizan los argumentos por referencia, para ilustrarlo mejor veamos el mismo ejemplo anterior, pero esta vez pasado el parametro de nuestra funcion por referencia.

   int cuadrado(int &);// con esto indicamos que el parametro es una referencia.

         int main()
        {
               int numero=2;//numero que vamos a elevar al cuadrado.
               cuadrado(numero); // llamada a la funcion con la variable "numero" como parametro.
                .....

 Como pueden ver en el prototipo de declaracion de la funcion "cuadrado" lo que cambia es la utilizacion del simbolo de referencia &, con lo cual estamos diciendole al compilador de C++ que ese argumento de la funcion, en realidad solo es una referencia a la variable original. ¿Que se logra con esto?, buen al ser un argumento por referencia, NO se DUPLICAN los valores , puesto que la funcion MODIFICA el valor original de la variable "numero", con esto se consigue una mejora considerable en tiempo de ejecucion.

Pero, siempre hay un pero, la desventaja de los argumentos por referencia es que al modificar los valores originales de las variables a las cuales se refiere, esto puede causar, si no se tiene precaucion, una corrupcion de datos, y comportamientos extraños en el programa. En otra entrada del blog vamos a ver como obtener las ventajas de ambos, sin poner en riesgo los valores de nuestro programa.

Referencias como un ALIAS:

Para terminar esta entrada del blog, vamos a comentar que tambien en C++ , se pueden declarar Referencias, como si fueran variables, pero que en realidad es como si le pusieramos un "alias" a nuestra variable original, con lo cual si realizamos operaciones con la referencia en realidad se modifica la variable original, veamos un ejemplo.

int main()
{    
        int numero=10; // esta es la variable original
        int &num=numero; // aqui declaramos la referencia, debe inicializarse SIEMPRE.
        num++; // aqui incrementamos por medio del ALIAS , la variable numero.
        .....

Como podemos observar la referencias en C++ , son simplemente otro nombre para las variables declaradas, dejar una referencia sin inicializar nos genera error de compilacion, por que en realidad una referencia NO es un OBJETO, mas adelante seguiremos trantando este tema, por lo pronto esto seria todo por esta ocasion, espero te haya sido de ayuda esta informacion. :)

Comentarios

Entradas populares de este blog

Crear la funcion gotoxy(), en dev-c++ ... ejemplo sencillo.

Ejercicio de C++, ejemplo: promedio de un Alumno y la sentencia IF

Como dar formato a los decimales en C++