8. Funciones y Tipos de Retorno
Una función es un bloque de código reutilizable diseñado para realizar una tarea específica. En C++, cada función declara explícitamente su tipo de retorno (qué valor devuelve al terminar) y sus parámetros (qué datos necesita para trabajar).
1. Ejemplos Fundamentales y Sencillos
Comencemos observando funciones básicas con los casos de uso más cotidianos:
A. Suma de dos números (Retorno int o double)
Una función de tipo int toma dos enteros y devuelve la suma resultante con la palabra clave return.
B. Calculadora básica (Retornos según la operación)
Podemos crear funciones para cada operación de una calculadora (sumar, restar, multiplicar, dividir):
C. Formatear Nombre Completo (Retorno std::string)
Una función que recibe el nombre y el apellido y los une (concatena) devolviendo un std::string completo:
D. Verificación de Estado (Retorno bool)
Las funciones de tipo bool devuelven true o false y son muy útiles para evaluar condiciones:
E. Función sin Retorno (void)
Cuando una función solo realiza acciones (imprimir en consola, guardar datos) y no necesita entregar un valor de regreso, su tipo de retorno debe ser void.
2. Anatomía de una Función y Prototipos
En C++ las funciones deben declararse antes de ser utilizadas. En programas o librerías grandes es una buena práctica separar la declaración (prototipo) de la definición (cuerpo de la función).
3. Resumen de Todos los Tipos de Retorno Posibles en C++
A medida que avanzas en C++, descubrirás que las funciones pueden retornar tipos de datos mucho más complejos:
| Tipo de Retorno | Descripción / Caso de Uso | Sintaxis / Ejemplo |
|---|---|---|
void | No devuelve ningún valor (solo ejecuta acciones). | void saludar() |
Tipos Primitivos (int, double, bool, char) | Devuelven un único valor numérico, lógico o carácter. | int sumar(int a, int b) |
Cadenas (std::string) | Devuelve un texto formateado o procesado. | std::string getNombre() |
Estructuras / Clases (struct / class) | Devuelve un objeto personalizado agrupando varios campos. | Persona crearPersona() |
Colecciones (std::vector) | Devuelve un arreglo dinámico o lista completa de datos. | std::vector<int> obtenerPares() |
std::pair<T1, T2> | Devuelve exactamente dos valores a la vez. | std::pair<int, bool> buscar() |
std::tuple<T1, T2, T3...> | Devuelve tres o más valores sin crear un struct. | std::tuple<string, int, double> |
std::optional<T> (C++17) | Devuelve un valor que puede o no existir (búsquedas o cálculos fallidos). | std::optional<double> dividir() |
Referencias (T& o const T&) | Devuelve un alias directo al objeto original para modificarlo o evitar copias. | const std::string& getNombre() |
Deducción de Tipo (auto) (C++14) | El compilador deduce automáticamente el tipo de retorno. | auto multiplicar(double a, double b) |
4. Retornos Avanzados en Código
A. Retorno de Múltiples Valores (std::pair y std::tuple)
B. Búsqueda y Manejo de Errores con std::optional (C++17)
5. Paso de Parámetros: Valor, Referencia y const
Al definir los argumentos de una función:
- Por Valor (
int x): Se crea una copia independiente. - Por Referencia (
int &x): Modificarxcambia la variable original. - Por Referencia Constante (
const std::string &s): No hace copias pesadas y garantiza que el valor original no sea modificado.
👨💻 Ejercicio Práctico 1
Escribe una función double calcularAreaTriangulo(double base, double altura) que devuelva el área de un triángulo ((base * altura) / 2). Pruébala en main().
👁️ Ver solución propuesta
👨💻 Ejercicio Práctico 2
Crea una función bool esCuentaValida(std::string usuario, std::string clave) que devuelva true solo si el usuario es "admin" y la clave es "1234".
👁️ Ver solución propuesta
¿Listo para el Desafío de Funciones en C++?
Pon a prueba tu agilidad con una ronda interactiva de 10 ejercicios aleatorios (autocompletado y depuración de errores) con feedback inmediato y sistema de puntuación.


