Polimorfismo

En C++ es posible declarar dos funciones diferentes que tengan el mismo nombre. Las funciones deben diferir en la lista de argumentos, bien en el número de variables que se pasan a la función, bien en el tipo de argumentos que recibe. Así, por ejemplo, se puede definir una función que trabaje, bien con enteros, bien con strings; sólo hay que definir dos funciones separadas con el mismo nombre:

#include <iostream.h>

void show(int val)
{
  cout <<" Es un entero :"<< val << '\n';
}

void show(char *val)
{
  cout <<"Es un carácter: "<< val << '\n';
}


main()
{
show (42);
show ("A");
show (452.2);
}

En la primera llamada a la función show, se le pasa un entero, por tanto se llama a la primera copia de la función show. La segunda vez, el argumento es un carácter, por tanto se utiliza la segunda definición, aquella que utiliza un carácter. Ahora bien, la tercera llamada utiliza un número real, y no existe una definición de la función para este caso. El compilador utiliza la primer definición. La salida del programa es:

 Es un entero :42
Es un carácter: A
 Es un entero :452

También podríamos haber convertido la variable con la que llamamos a la función a uno de los tipos para los cual show está definida. Por ejemplo, si sustituimos la tercera llamada del programa anterior por:

          show ((int)452.2);
la salida será:

Es un entero: 42
Es un carácter: A
Es un entero : 452

Es interesante destacar que la forma en que el compilador de C++ implementa la sobrecarga de funciones es bastante simple. Aunque las funciones compartan el mismo nombre en el texto fuente, el compilador usa nombres diferentes. La conversión de un nombre en el fichero fuente al nombre usado internamente se llama 'name mangling'. Por ejemplo, el compilado de C++ convertirá el nombre void show(int) al nombre interno VshowI, mientras que una función análoga con un argumento char* será llamada VshowCP . Los nombres reales utilizados internamente dependen del compilador y no son relevantes para el programador.

Algunos comentarios sobre la sobrecarga de funciones:

Free Web Hosting