Sobrecarga de Funciones en C++

Cómo el titulo lo indica, vamos a hablar sobre otra de las características que hace fuerte a C++, y es la sobrecarga, en este caso de funciones/métodos (porque además también existe la sobrecarga de operadores que veremos en otro artículo).

cc

Cuando hablamos de sobrecarga de funciones o métodos en C++, hacemos referencia al hecho de que podemos tener más de una función con el mismo nombre a lo largo de nuestro programa, sin embargo no podemos tener exactamente la misma función (de todas formas no tendría sentido), es decir, la variación que debería haber para realizar una sobrecarga exitosa debería ser el tipo de dato que se retorna, o por ejemplo el tipo de dato o la cantidad de parámetros de entrada (es decir, los argumentos que recibe).

Teniendo en cuenta lo anterior vamos a llevar a cabo un sencillo ejemplo para que observes la sobrecarga de funciones en acción, en este caso vamos a implementar una función bastante típica cuando se inicia con un lenguaje de programación, la función llevará a cabo la suma de dos números, y sí, adivinaste el nombre, la llamaremos suma( )…sin embargo ocurre algo especial con esta función, debería ser capaz de realizar la suma recibiendo argumentos de tipo entero y de tipo real (como 3.42 o 8.4765).

Como sabemos del lenguaje C, cuando se declara una función, solo se puede indicar un tipo de dato (int, float, char, double, etc) por cada dato que se recibirá, por lo tanto lo que haremos a continuación es implementar dos funciones que tendrán el mismo nombre suma( ) pero que una recibirá y retornará valores de tipo entero (int) y la otra función recibirá y retornará valores de tipo real (double).

Vamos a dividir el código completo en 3 partes, para explicar cada una de ellas de forma más entendible. A continuación se presenta la primera parte del programa, con la directiva de preprocesador, el espacio de nombres a usar (en este caso el estándar, std) y luego, los prototipos de la función suma( ) sobrecargada, como puedes notar, ambas funciones tienen el mismo nombre pero los tipos de dato con los que trabaja son diferentes, por lo que es válida la declaración.


#include <iostream>

using namespace std;

//Prototipos de la función sobrecargada suma( )
int suma(int, int);
double suma(double, double);
A continuación se lleva a cabo la definición de la función principal main( ), que dada la finalidad del ejemplo, es muy sencilla, y lo único que hacemos es imprimir en pantalla el resultado de las dos funciones suma.
// Definición de la función principal

int main(void)
{
     cout<<"2   +  3  = "<<suma(2,3)<<endl;
     cout<<"4.5 + 2.1 = "<<suma(4.5,2.1)<<endl<<endl;

     return 0;
}
Finalmente realizamos la definición de las “dos” funciones suma( ) las cuales resultan ser muy básicas, por la finalidad del ejemplo.

//Definición de la función suma sobrecargada...para enteros y reales

int suma(int a, int b)
{
    return (a+b);
}

double suma(double a, double b)
{
    return (a+b);
}

Lo que sucede cuando el compilador encuentra funciones sobrecargadas, es “ver” cuales son los tipos de dato que se pasan a dicha función o la cantidad de los mismos (ya que estos pueden variar) y ver cual de todas las funciones cumple con dichas especificaciones y hacer el llamado respectivo.
Por último, solo queda recordar, que para realizar una buena sobrecarga de funciones, solo hay que tener en cuenta que todas las funciones del mismo nombre tienen que diferir en algo en sus prototipos, ya sean en los tipos de datos recibidos o retornados, la cantidad de argumentos, etc; incluso si el cuerpo de las mismas es completamente diferente, lo importante es lo que mencionábamos anteriormente.
Finalmente, a continuación se encuentra el código completo, listo para compilar y ejecutar.

#include <iostream>

using namespace std;

//  Ejemplo de sobrecarga de funciones en C++

//Prototipos de la función sobrecargada suma( )

int suma(int, int);
double suma(double, double);

// Definición de la función principal

int main(void)
{
    cout<<"2   +  3  = "<<suma(2,3)<<endl<<endl;
    cout<<"4.5 + 2.1 = "<<suma(4.5,2.1)<<endl<<endl;

    return 0;
}

//Definición de la función suma sobrecargada...para enteros y reales

int suma(int a, int b)
{
    return (a+b);
}

double suma(double a, double b)
{
    return (a+b);
}

Hasta aquí este artículo, en el cual se ha presentado de forma breve y concisa el tema de la sobrecarga de funciones, espero que te haya sido útil y si crees que esta información puede serle útil a alguien más, ayúdanos a compartirla.
Saludos.

Autor: Julio César Marulanda

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s