Concepto

Cuando se pasa un parámetro por referencia, se le da a la función acceso directo a la variable original en lugar de a una copia de ella. Esto significa que cualquier cambio realizado en el parámetro dentro de la función afectará a la variable original.

La sintaxis para pasar parámetros por referencia es la siguiente:

tipoDeRetorno nombreFuncion(tipo &var1, tipo &var2){
    // Código
}

Aquí, el símbolo & indica que el parámetro se pasa por referencia, lo que significa que la función recibirá la dirección de memoria de la variable en lugar de una copia del valor.

Ejemplo Práctico

A continuación se muestra un ejemplo que ilustra cómo se utiliza el paso de parámetros por referencia:

#include <iostream>
#include <conio.h>

using namespace std;

// Prototipo de la función que usa parámetros por referencia
void valNuevo(int &, int &);

int main() {
    int num1, num2;

    // Solicitar al usuario que ingrese dos números
    cout << "Digite dos numeros: " << endl;
    cin >> num1 >> num2;

    // Llamada a la función que modifica los valores
    valNuevo(num1, num2);

    // Mostrar los valores modificados
    cout << "El valor del primer numero es: " << num1 << endl;
    cout << "El valor del segundo numero es: " << num2 << endl;

    getch(); // Espera a que el usuario presione una tecla
    return 0;
}

// Definición de la función que modifica los parámetros por referencia
void valNuevo(int &num1, int &num2) {
    // Mostrar los valores originales recibidos
    cout << "El valor del primer numero es: " << num1 << endl;
    cout << "El valor del segundo numero es: " << num2 << endl;

    // Modificar los valores de las variables originales
    num1 = 100;
    num2 = 72;
}

Explicación del Código

  1. Definición de la Función valNuevo:

    • La función valNuevo recibe dos parámetros por referencia (num1 y num2). Esto significa que num1 y num2 en la función valNuevo son en realidad referencias a las variables originales pasadas desde la función main.
  2. Modificación de Valores:

    • Dentro de valNuevo, se muestran los valores originales de num1 y num2. Luego, se modifican estos valores (num1 se cambia a 100 y num2 se cambia a 72). Dado que estos parámetros son referencias, las modificaciones afectan directamente a las variables en main.
  3. Mostrar Resultados:

    • Después de la llamada a valNuevo, el programa muestra los valores de num1 y num2 en la función main. Como resultado, los valores modificados en valNuevo también se reflejan en main.

Ventajas del Paso de Parámetros por Referencia

  • Eficiencia: Evita la necesidad de hacer copias de grandes estructuras de datos, lo que puede mejorar el rendimiento.
  • Modificación Directa: Permite a las funciones modificar las variables originales, lo que puede ser útil en ciertos casos.

Consideraciones

  • Precaución con los Cambios: Dado que las funciones pueden modificar las variables originales, es importante tener cuidado para no introducir errores inesperados.
  • Uso en Funciones: El paso por referencia es especialmente útil en funciones que necesitan modificar múltiples valores o cuando se trabajan con estructuras de datos grandes.

Devolver valores múltiples

Aquí tienes una versión mejorada del apunte sobre cómo devolver múltiples valores desde una función en C++ usando el paso de parámetros por referencia. He incluido una explicación más detallada y algunos comentarios adicionales para aclarar el concepto.


Devolver Valores Múltiples en C++

En C++, las funciones tradicionalmente devuelven un único valor. Sin embargo, es posible devolver múltiples valores utilizando el paso de parámetros por referencia. En este enfoque, se pasa la dirección de memoria de las variables a la función, permitiéndole modificar directamente esas variables y devolver múltiples resultados.

Sintaxis

Para devolver múltiples valores, se definen los parámetros que se deben pasar por referencia en la lista de parámetros de la función. La función puede entonces modificar estos parámetros para devolver varios resultados.

Sintaxis general:

tipoDeRetorno nombre(tipoDeDato, tipoDeDato, tipoDeDato&, tipoDeDato&);

Aquí, tipoDeDato& indica que los parámetros son pasados por referencia, permitiendo que la función modifique los valores originales.

Ejemplo Práctico

A continuación se presenta un ejemplo que muestra cómo devolver la suma y el producto de dos números utilizando el paso de parámetros por referencia:

// Devolver valores múltiples

// Cálculo de la suma y el producto de dos números

#include <iostream>
#include <conio.h>

using namespace std;

// Prototipo de la función
void calcular(int, int, int &, int &);

int main() {
    int num1, num2, suma, producto;

    // Solicitar al usuario que ingrese dos números
    cout << "Digite dos numeros: " << endl;
    cin >> num1 >> num2;

    // Llamada a la función que calcula la suma y el producto
    calcular(num1, num2, suma, producto);

    // Mostrar los resultados
    cout << "El valor de la suma es: " << suma << endl;
    cout << "El valor del producto es: " << producto << endl;

    getch(); // Espera a que el usuario presione una tecla
    return 0;
}

// Definición de la función que calcula la suma y el producto
void calcular(int num1, int num2, int &suma, int &producto) {
    // Calcular la suma y el producto
    suma = num1 + num2;
    producto = num1 * num2;
}
Digite dos numeros:
5
6
El valor de la suma es: 11
El valor del producto es: 30
--------------------------------
Process exited after 24.8 seconds with return value 0
Presione una tecla para continuar . . .

Explicación del Código

  1. Definición de la Función calcular:

    • La función calcular recibe dos parámetros por valor (num1 y num2) y dos parámetros por referencia (suma y producto).
    • Calcula la suma y el producto de num1 y num2, y almacena los resultados en las variables suma y producto, respectivamente.
  2. Llamada a la Función:

    • En la función main, se solicitan dos números al usuario y se pasan a la función calcular.
    • La función calcular modifica las variables suma y producto directamente, utilizando la referencia.
  3. Mostrar Resultados:

    • Después de la llamada a calcular, se muestran los resultados de la suma y el producto, que han sido modificados directamente en la función calcular.

Ventajas del Uso de Parámetros por Referencia para Devolver Múltiples Valores

  • Eficiencia: Evita la necesidad de usar estructuras adicionales para devolver varios valores.
  • Simplicidad: Permite que una función devuelva múltiples resultados de manera directa y sencilla.

Consideraciones

  • Precaución con los Cambios: Al utilizar parámetros por referencia, es importante ser consciente de que la función puede modificar las variables originales. Asegúrate de que esto sea lo que se desea antes de implementar esta técnica.
  • Uso en Funciones: Este método es útil cuando se necesitan devolver más de un resultado y se quiere evitar la sobrecarga de retornar una estructura compleja o usar punteros.