C++ implementa el concepto de sobrecarga para operadores y funciones, en este apartado revisamos la sobrecarga de funciones.
La sobrecarga de funciones y operadores son temas exclusivos de C++, no existen en la definición de C estándar
¿Qué es la sobrecarga de funciones?
La sobrecarga de funciones es la asignación del mismo nombre a una función que tienen definiciones distintas. Sobrecargar funciones nos permite crear múltiples funciones con el mismo nombre, siempre y cuando tengan diferentes parámetros o que difieran en el tipo de dato de los parámetros.
Existen algunas consideraciones que se deben tener al sobrecargar funciones:
- El tipo de retorno debe ser el mismo
- Los argumentos pueden ser de diferente tipo
- La traducción de las funciones se realiza en tiempo de compilación
La mejor forma de comprender la sobrecarga es con un ejemplo sencillo.
// cpp_70_sobrecargaFunciones.cpp
// Se ilustra la sobrecarga de funciones
// 2019, Por http://about.me/carlosgbr
// Versión 1
// Revisa todo el código del tutorial en: https://github.com/carlosgbr/
// Compilado en https://www.onlinegdb.com/online_c++_compiler
#include <iostream>
using namespace std;
// Sobrecarga de la función imprime, observa que el tipo de retorno es el mismo en todos, solo varía el tipo del argumento
void imprime(int a){
cout << "Entero" << endl;
}
void imprime(float a){
cout << "Flotante" << endl;
}
void imprime(double a){
cout << "Doble" << endl;
}
int main() {
imprime(42);
imprime(42.0f);
imprime(42.1);
return 0;
}
Mismo nombre, diferentes funciones.
Como puedes observar, definimos 3 funciones con el mismo nombre, mismo tipo de retorno y mismo número de parámetros. Sin embargo para el compilador son 3 objetos completamente distintos. Esta posibilidad te permite definir funciones genéricas que pueden responder de distinta forma con un mismo conjunto de parámetros. De hecho varias funciones de las librerías de C++ están definidas de esta forma, por dar un ejemplo tenemos la función pow(x,y) de la librería cmath(1)
float pow (float x, float y)
double pow (double x, double y)
Sobrecarga en funciones con diferentes parámetros
La sobrecarga de funciones te permite utilizar diferente número de parámetros en las funciones sobrecargadas, de modo que puedes definir «una» función para diferentes casos.
Consideremos el cálculo del área de un triángulo. El triángulo es un caso en sí mismo, para calcular el área de un triángulo podemos hacerlo de acuerdo a la información con la que contemos (lados, ángulos, altura), y de acuerdo a esta información utilizaremos una fórmula u otra. Si quisiéramos implementar una función universal para calcular el área del triángulo terminaríamos con una función compleja, con muchos parámetros e incluso tal vez con algunos «switches» para activar o desactivar ciertas opciones.
En lugar de hacer esto, podemos definir funciones con el mismo nombre que para el usuario serán «una» aunque la implementación sean varias.
Para ilustrar este tema definimos los 3 casos más conocidos cuando se requiere calcular el área de un triángulo:
(sqrt, es la función para obtener la raíz cuadrada del argumento), para utilizarla debes incluir la biblioteca cmath
Triángulo equilátero (3 lados iguales):
área = ( (sqrt(3)/4) * (a * a) )
Para este caso solo necesitamos conocer un lado, nuestro prototipo de función podemos definirlo de la siguiente forma:
double trianguloarea(double a);
2. Triángulo isósceles. (2 lados iguales y 1 diferente)
área = (b * (sqrt ((a * a) – ( (b * b) / 4 ) ) ) ) / 2
Para este caso necesitamos conocer un lado y el valor de la base, nuestro prototipo de función podemos definirlo de la siguiente forma:
double trianguloarea(double a, double b);
3. Triángulo escaleno
Para este cálculo se utiliza la fórmula de Herón. Utilizando la notación de computadora, la fórmula de Herón la fórmula que utilizaremos queda:
p = ( (a + b + c) / 2 )
area = sqrt( (p* (p – a) * (p – b) * (p – c)) )
Para este caso necesitamos conocer los 3 lados del triángulo, nuestro prototipo de función podemos definirlo de la siguiente forma:
double trianguloarea(double a, double b, double c);
Cálculo del área de un triángulo utilizando sobrecarga de funciones
Nuestro programa queda de la siguiente manera.
// cpp_71_sobrecargaTriangulo.cpp
// Se ilustra la sobrecarga de funciones para el cálculo del área de un triángulo
// 2019, Por http://about.me/carlosgbr
// Versión 1
// Revisa todo el código del tutoral en: https://github.com/carlosgbr/
// Compilado en https://www.onlinegdb.com/online_c++_compiler
#include <iostream>
#include <cmath> // Para utilizar sqrt()
using namespace std;
double trianguloarea(double);
double trianguloarea(double, double);
double trianguloarea(double, double, double);
int main()
{
// El número de parámetros que pasamos determinar el tipo de triángulo que
// calculamos, 1 parámetro = Equilátero, 2 parámetros = isóceles
// 3 parámetros = escaleno.
double a = 2;
double b = 4;
double c = 5;
cout << "Triángulo. Lado = " << a << " :" << trianguloarea(a) << endl;
cout << "Triángulo. Lado = " << a << ", Base = : " << b << " :" << trianguloarea(a, b) << endl;
cout << "Triángulo. Lado 1 = " << a << ", Lado 2 = " << b << ", Lado 3 = "
<< c << " :" << trianguloarea(a, b, c) << endl;
return 0;
}
double trianguloarea(double a)
// area = ( (sqrt(3)/4) * (a * a) )
{
cout << "Calculando área de triángulo equilátero: " << endl;
return ( (sqrt(3)/4) * (a * a) );
}
double trianguloarea(double a, double b)
{
cout << "Calculando área de triángulo isóceles: " << endl;
return (b * (sqrt ((a * a) - ( (b * b) / 4 ) ) ) ) / 2;
}
double trianguloarea(double a, double b, double c)
{
double p;
p = ( (a + b + c) / 2 );
cout << "Calculando área de triángulo escaleno: " << endl;
return sqrt( (p* (p - a) * (p - b) * (p - c)) );
}
La salida para nuestro programa la podemos ver a continuación.
Si intentáramos crea un función que contemplara los 3 tipos de triángulos, llegaríamos a una función compleja y extensa es buena idea que lo intentes), utilizando sobrecarga de funciones, simplificamos en gran medida el desarrollo de «una función» (para el usuario) que realice este trabajo.
Sobrecarga de operadores.
Los operadores son unos tokens con propiedades muy particulares, pero a final de cuentas también son funciones en C++, los operadores también se pueden sobre cargar, pero para poder revisar este tema nos faltan algunas herramientas, posteriormente se abordará su estudio.
Si tienes alguna duda, plantéala en la sección de preguntas.
Si tienes alguna duda que no se responde en este documento, por favor plantea tu pregunta para poder responderte. O escribe directamente a soporte@ehack.mx
Referencias
- Por Roberto C. González para Ethical Hack
- (1) Definición de la función Pow en CPP Reference
Fuente Imágenes
- «Todas las imágenes de esta sección»: by Nala Systems
Tutorial de C++ by eHack
- Volver al índice de temas del Tutorial de C++
- *** Durante todo este tutorial se repetirá: Este es un curso orientado a gente que nunca ha programado, incluso a gente ajena a la informática. Por esta razón el desarrollo puede parecer lento en ciertas etapas. Prefiero ser claro paso a paso, que hacer «pasos mágicos» como suele ocurrir cuando se enseña programación. *** También es buena idea leas esta entrada si te preguntas «Por qué C++»
Código Fuente
- El código fuente de toda la serie lo puedes descargar en nuestro repositorio en github busca los programas con el nombre del encabezado de cada programa.
- Código de esta sección
Sobrecarga de Funciones, por Roberto C. González. Se distribuye bajo una Licencia Creative Commons Atribución-NoComercial-CompartirIgual 4.0 Internacional.
©2025, Ethical Hack, Todos los derechos reservados sobre el contenido propio.