37. C++ || Funciones sobrecarga






La sobrecarga de funciones es una propiedad que tiene C++ para crear funciones con el mismo nombre pero diferentes parámetros. Se toma a los parámetros o argumentos distintos cuando: se tiene un tipo de dato distinto, cuando se tiene un número diferente de argumentos, cuando ocurre las dos cosas. Por ejemplo, supongamos que tenemos una función que devuelve el cuadrado de un número.

int cuadrado(int n){return (n*n); }

¿Qué pasa? Que esta función sólo acepta un número entero (int) así que, si queremos pasar como argumento un número de tipo real float o double no podríamos, a menos que hiciéramos dos funciones como sigue:


float fcuadrado(float n){return (n*n); }
double dcuadrado(double n){return (n*n); }


Pero como C++ soporta la sobrecarga, se puede implementar funciones sobrecargadas que tuvieran el mismo nombre y diferentes argumentos.


int cuadrado(int n){return (n*n); }
float cuadrado(float n){return (n*n); }
double cuadrado(double n){return (n*n); }


No te debes preocupar al hacer esto, el compilador aquí va a verificar el tipo de parámetro enviado y luego llamará la función correspondiente. Ejemplo:


#include <iostream>
using namespace std;

void mostrar(int x);
void mostrar(char a);
void mostrar(char *c);


int main()
{
    mostrar(7);
    mostrar('s');
    mostrar("Aprender a Programar PRO");

    return 0;
}

void mostrar(int x)
{
    cout<<"Este es un entero: "<<x<<endl;
}

void mostrar(char a)
{
    cout<<"Esta es una letra: "<<a<<endl;
}

void mostrar(char *c)
{
    cout<<"Esta es una cadena: "<<c<<endl;
}


Nota: para sobrecargar una función, al menos uno de los parámetros debe de ser de un tipo diferente del que utilizan otras funciones, no puede haber dos funciones con el mismo nombre, la misma cantidad de parámetros y los mismo tipos de parámetros, esto causaría un error.


int mostar(int a, int b, int c);
int mostar(int a, int b, int c);


Este último código produce un error.

Funciones bien sobrecargadas serían las siguientes:


void LeerDatos(int a, int b, int c);
void LeerDatos(int a, int b);
void LeerDatos(int a, int b, float c);
void LeerDatos(float a, float b, float c);
void LeerDatos(char a);
void LeerDatos(int a, float b, char c);



No hay comentarios