Datos devueltos por una función

En C++, una función puede devolver un valor utilizando la declaración de retorno return. El tipo de dato que devuelve una función se especifica en la firma de la función, es decir, en su declaración.

Aquí tienes un ejemplo que muestra cómo una función puede devolver un valor:

En este ejemplo, la función suma recibe dos enteros (int a, int b) como parámetros para devolver la suma de estos dos números.

Dentro de la función, se calcula el resultado…

…y se utiliza la declaración de retorno return resultado; para devolver el valor calculado.

En el main, se llama a la función suma con los argumentos 5 y 3, y se almacena el valor devuelto en la variable resultadoSuma.

Luego, se imprime el valor devuelto por la función utilizando std::cout.

Ten en cuenta que el tipo de dato que devuelve una función debe coincidir con el tipo especificado en su firma. Si una función no devuelve ningún valor, su tipo de retorno se define como void. Por ejemplo:

En este caso, la función saludar no tiene un tipo de retorno especificado, lo cual indica que no devuelve ningún valor. Dentro de la función, se imprime el saludo en la consola.

Al llamar a la función en el main, no es necesario almacenar el valor devuelto, ya que no hay ninguno.

Retornar una copia de los datos

En C++, cuando una función devuelve un tipo de dato que no es un puntero ni una referencia, se realiza una copia de los datos para ser devueltos. Esto implica que se crea una copia independiente de los valores dentro de la función y se devuelve esa copia al lugar donde se llamó a la función.

Aquí tienes un ejemplo que muestra cómo devuelve una copia de los datos:

En este ejemplo, la función obtenerCopia recibe una referencia constante a un objeto std::string como parámetro.

Dentro de la función, se crea una copia independiente del objeto mensaje utilizando el constructor de copia de std::string.

Luego, se devuelve esa copia al lugar donde se llamó a la función.

En el main, se declara un objeto mensajeOriginal de tipo std::string y se inicializa con un mensaje.

Luego, se llama a la función obtenerCopia pasando mensajeOriginal como argumento…

…y se almacena la copia devuelta en mensajeCopia.

Después, se modifica mensajeCopia agregando un texto adicional. Esto no afectará al mensajeOriginal, ya que son objetos independientes.

Finalmente, se imprimen ambos mensajes para verificar que son diferentes y que la modificación de la copia no afectó al original.

Devolver la dirección de una variable declarada static

En C++, puedes devolver la dirección de una variable declarada como static utilizando el operador de dirección &. Sin embargo, es importante tener en cuenta que la variable static tiene una duración extendida y conserva su valor incluso después de que la función haya finalizado. Por lo tanto, al devolver la dirección de una variable static, debes tener cuidado de garantizar que la variable permanezca válida después de que la función haya terminado.

Aquí tienes un ejemplo que muestra cómo devolver la dirección de una variable static:

En este ejemplo, la función obtenerDireccionStatic declara una variable static llamada numero e inicializa su valor en 10.

Luego, devuelve la dirección de memoria de esta variable utilizando el operador de dirección &.

En el main, se llama a la función obtenerDireccionStatic y se almacena la dirección de la variable numero en un puntero llamado puntero.

Luego, se imprime el valor en la dirección de memoria apuntada por puntero utilizando el operador de desreferencia *.

Es importante destacar que la variable numero es static, lo que significa que su duración se extiende más allá del alcance de la función obtenerDireccionStatic. Esto permite que la dirección devuelta por la función siga siendo válida incluso después de que la función haya terminado.

Devolver una referencia

En C++, también puedes devolver una referencia desde una función. Devolver una referencia permite acceder y modificar directamente el objeto referenciado en el lugar donde se llamó a la función. Para devolver una referencia, debes declarar el tipo de retorno de la función como una referencia y asegurarte de que la referencia devuelta sea válida después de que la función haya finalizado.

Veamos un ejemplo que muestra cómo devolver una referencia desde una función:

En este ejemplo, la función obtenerReferencia declara una variable static llamada numero e inicializa su valor en 10.

Luego, devuelve una referencia a esta variable. La referencia devuelta, en este caso, es una referencia a un entero.

En el main, se llama a la función obtenerReferencia

…y se almacena la referencia devuelta en una variable llamada referencia.

Esto permite acceder y modificar directamente el objeto referenciado en la función obtenerReferencia.

En el ejemplo, se imprime el valor de la referencia utilizando std::cout,…

…y luego se modifica el valor de la referencia a 20. Al modificar la referencia, también se modifica numero dentro de la función obtenerReferencia.

Luego se imprime el nuevo valor de la referencia usando std::cout.

Resultado de la ejecución del ejemplo:

Es importante tener en cuenta que, al devolver una referencia, debes garantizar que el objeto referenciado sea válido después de que la función haya finalizado.

Sin embargo, debes tener cuidado al devolver referencias a objetos locales o temporales, ya que su duración es limitada y la referencia se volverá inválida una vez que la función haya terminado. Devolver una referencia inválida resultará en un comportamiento indefinido.