La sobrecarga de funciones es una característica de muchos lenguajes de programación donde se pueden crear múltiples métodos con el mismo nombre pero con diferentes parámetros de entrada o tipos de retorno. Ésta es una característica común en la programación orientada a objetos; Los constructores en particular pueden tener múltiples variantes sobrecargadas diferentes. Esencialmente, la sobrecarga de funciones es útil cuando dos funciones hacen cosas muy similares y pueden necesitar varios tipos de entrada para hacerlo. Los constructores se pueden sobrecargar fácilmente porque no tienen un tipo de retorno explícito especificado, por lo que simplemente cambiar los parámetros de entrada de un constructor sería una sobrecarga válida.
La primera forma en que se puede sobrecargar una función es cambiando sus parámetros de entrada. Por ejemplo, se puede considerar una función llamada «sumar» que toma como entrada dos números enteros. El propósito de esta función es bastante obvio; está destinado a encontrar la suma de dos números enteros.
Sin embargo, si uno quisiera encontrar la suma de dos flotantes o números decimales, esta función no sería aplicable. Entonces, sería necesaria una segunda función sobrecargada, definida como una función llamada «agregar» que toma como entrada dos flotantes. Las funciones hacen esencialmente lo mismo, pero la sobrecarga de funciones es necesaria porque sus entradas son significativamente diferentes.
La segunda forma en que se puede sobrecargar una función es cambiar tanto sus parámetros de entrada como su tipo de retorno. Usando el ejemplo anterior, se puede considerar si ambas funciones «agregar» sobrecargadas tenían un tipo de retorno vacío; es decir, no devolvieron nada. Esto seguiría siendo una sobrecarga de funciones válida, pero los tipos de retorno de los dos métodos también podrían cambiarse. En otra instancia válida de sobrecarga, la función «sumar» que toma dos números enteros podría devolver esa suma de números enteros, y la función «sumar» que toma dos números decimales podría devolver esa suma de números decimales.
Sin embargo, simplemente cambiar el tipo de retorno de una función no se considera una sobrecarga de función válida. Cambiar solo el tipo de retorno de una función da como resultado ambigüedad, porque no está claro en la firma del método qué tipo de retorno se desea. Los parámetros también se pueden definir de forma ambigua, por lo que es muy importante que las funciones sobrecargadas se llamen correctamente. Por ejemplo, si uno tiene una función sobrecargada que tiene un número entero como parámetro de entrada y otro que tiene un número decimal como parámetro, sería muy fácil para alguien llamar accidentalmente a la función de número decimal en lugar de la función de número entero. o viceversa, porque tienen el mismo nombre. Los parámetros ambiguos como estos deben evitarse si es posible, y si no pueden ser, se debe tener mucho cuidado para asegurarse de que se llame a la función sobrecargada adecuada en los momentos adecuados.
La sobrecarga de funciones es útil para crear funciones relacionadas con diversos tipos de entrada y le da al código mucha flexibilidad. Una consideración final sobre las funciones sobrecargadas es que es esencial contar con comentarios adecuados. Aunque puede quedar claro al diferenciar los parámetros de entrada qué versión de una función sobrecargada es la adecuada para una situación particular, puede que no siempre quede claro con precisión qué hace la función de manera diferente a sus otros socios sobrecargados.