La sobrecarga de funciones en C++ y la alternativa en C
En esta lección vas a usar la sobrecarga de funciones (function overloading) de C++ para que un mismo nombre de función sirva para varios tipos, y a compararla con el enfoque de C.
Introducción
La sobrecarga de funciones (function overloading) permite tener varias funciones con el mismo nombre pero con tipos de parámetros distintos. Al llamarla, el compilador de C++ elige la versión correcta según el tipo de los argumentos. C no tiene esta posibilidad, así que cada función debe tener un nombre distinto.
Puntos importantes
- Entiende cómo se hace en C antes de aprender las abstracciones de C++.
- Expresa la propiedad de los recursos con RAII y la semántica de valor (value semantics).
- Usa las herramientas de C++ con seguridad de tipos en lugar de macros y conversiones de tipo.
Ejemplos de código C y C++
#include <stdio.h>
int max_int(int left, int right) {
return left > right ? left : right;
}
double max_double(double left, double right) {
return left > right ? left : right;
}
int main(void) {
printf("%d %.1f\n", max_int(3, 8), max_double(4.5, 2.0));
}
8 4.5
#include <iostream>
int maximum(int left, int right) {
return left > right ? left : right;
}
double maximum(double left, double right) {
return left > right ? left : right;
}
int main() {
std::cout << maximum(3, 8) << ' '
<< maximum(4.5, 2.0) << '\n';
}
8 4.5
Comparación entre C y C++
En C, las dos funciones max_int y max_double tienen que indicar el tipo en su nombre. En C++, ambas se llaman maximum, y el compilador elige la versión correcta según si el argumento es un int o un double. Esta elección se hace al compilar, así que no hace más lento el programa.
C usa convenciones de nombres, callbacks, macros y struct de contexto.
C++ ofrece abstracciones con un alcance bien delimitado, con seguridad de tipos y normalmente sin coste adicional al ejecutar.
Ejercicios de práctica
Ejecuta las dos versiones y después modifica el código para ver la diferencia de seguridad que aporta cada lenguaje.
- Escribe primero el mecanismo en C y después usa la función equivalente de C++.
- Sustituye la liberación manual de recursos por RAII.
- Comprueba si la función provoca reservas de memoria o llamadas a funciones virtuales.
Practica con un reto
Usa lo que cubre esta lección para resolver un problema real. Cada reto se ejecuta en el navegador, con pruebas al instante y una revisión de IA.
Todos los retos