En C++, el retorno de una función es el mecanismo mediante el cual una función puede (opcionalmente) devolver un valor al código que la invocó. Esto se realiza usando la palabra clave return
.
El valor devuelto puede ser de cualquier tipo de dato (tipos primitivos, structs, objetos…). También es posible que una función no devuelva ningún valor, lo cual se indica con el tipo de retorno void
.
En general, únicamente podemos devolver solo un valor directamente. Pero podemos devolver una agrupación de varios (por ejemplo, estructuras o clases).
Si quieres aprender más sobre el retorno de funciones
consulta el Curso de Introducción a la Programación leer más ⯈
Retorno de void
Cuando una función no necesita devolver ningún valor, se declara con el tipo de retorno void
. En este caso, la función realiza una acción sin proporcionar un resultado.
#include <iostream>
void Saludar() {
std::cout << "¡Hola!" << std::endl;
}
int main() {
Saludar(); // Imprime "¡Hola!"
return 0;
}
Retorno de un valor
Para devolver un valor desde una función, se utiliza la palabra reservadareturn
. El tipo de retorno de la función debe coincidir con el tipo del valor devuelto.
Al alcanzar una instrucción return
, la ejecución de la función se detiene y el control se devuelve a la función que realizó la llamada.
#include <iostream>
int Sumar(int a, int b) {
return a + b;
}
int main() {
int resultado = Sumar(3, 4);
std::cout << "La suma es: " << resultado << std::endl; // Imprime "La suma es: 7"
return 0;
}
Retorno de múltiples valores
Aunque no se puede devolver directamente más de un valor desde una función, hay varias técnicas para devolver múltiples valores en C++:
Usar clases o estructuras
Una forma común es encapsular los valores en una clase o estructura y devolver una instancia de esa clase o estructura.
#include <iostream>
struct Resultado {
int numero;
std::string texto;
};
Resultado ObtenerResultado() {
return {42, "Ejemplo"};
}
int main() {
Resultado res = ObtenerResultado();
std::cout << "Número: " << res.numero << ", Texto: " << res.texto << std::endl; // Imprime "Número: 42, Texto: Ejemplo"
return 0;
}
Retorno de colecciones
Las funciones también pueden devolver colecciones como arreglos, vectores, listas o mapas.
#include <iostream>
#include <vector>
std::vector<int> ObtenerLista() {
return {1, 2, 3, 4, 5};
}
int main() {
std::vector<int> lista = ObtenerLista();
for (int num : lista) {
std::cout << num << " ";
}
std::cout << std::endl; // Imprime "1 2 3 4 5"
return 0;
}
Usar tuplasc++17 y superior
A partir de C++17, se pueden usar tuplas para devolver múltiples valores. Las tuplas permiten agrupar valores de diferentes tipos en un solo objeto.
#include <iostream>
#include <tuple>
std::tuple<int, std::string> ObtenerDatos() {
return {42, "Ejemplo"};
}
int main() {
auto [numero, texto] = ObtenerDatos();
std::cout << "Número: " << numero << ", Texto: " << texto << std::endl; // Imprime "Número: 42, Texto: Ejemplo"
return 0;
}
Ejemplos prácticos
Ejemplo de función void
En este ejemplo, se muestra cómo definir una función que no retorna ningún valor usando void
.
#include <iostream>
void MostrarMensaje(const std::string &mensaje) {
std::cout << mensaje << std::endl;
}
int main() {
MostrarMensaje("Hola, Mundo!"); // Imprime "Hola, Mundo!"
return 0;
}
Ejemplo de función con retorno de valor
En este ejemplo, se muestra cómo definir una función que retorna un valor calculado, en este caso, el área de un círculo.
#include <iostream>
#include <cmath> // Para la constante M_PI
double CalcularAreaCirculo(double radio) {
return M_PI * radio * radio;
}
int main() {
double area = CalcularAreaCirculo(5.0);
std::cout << "El área del círculo es: " << area << std::endl; // Imprime "El área del círculo es: 78.5398"
return 0;
}
Ejemplo de función con retorno de tupla
En este ejemplo, se muestra cómo definir una función que retorna una tupla con dos valores calculados.
#include <iostream>
#include <tuple>
std::tuple<int, int> CalcularSumaYProducto(int a, int b) {
return {a + b, a * b};
}
int main() {
auto [suma, producto] = CalcularSumaYProducto(3, 4);
std::cout << "Suma: " << suma << ", Producto: " << producto << std::endl; // Imprime "Suma: 7, Producto: 12"
return 0;
}
Ejemplo de función con retorno de clase
En este ejemplo, se muestra cómo definir una función que retorna una instancia de una clase. Aquí, se crea una instancia de la clase Persona
.
#include <iostream>
class Persona {
public:
std::string nombre;
int edad;
};
Persona CrearPersona(const std::string &nombre, int edad) {
return {nombre, edad};
}
int main() {
Persona persona = CrearPersona("Luis", 30);
std::cout << "Nombre: " << persona.nombre << ", Edad: " << persona.edad << std::endl; // Imprime "Nombre: Luis, Edad: 30"
return 0;
}