[C con Clase] Sobrecarga

Steven Davidson steven en conclase.net
Mar Mar 13 13:38:13 CET 2007


Hola Alejandro,

El pasado 2007-03-13 12:08:31, Alejandro escribió:

A> Hola, tengo una duda con el problema de sobrecarga de funciones. Si le  pongo parametros por defecto al prototipo con 4 argumentos, me da un  error el compilador,  ¿que hago mal? ¿entiendo bien el problema?
A>   

Sin saber el código que has escrito ni el mensaje de error no podemos darte una respuesta concreta.

Es posible que tu diseño de las funciones sobrecargadas sea ambiguo con las funciones de argumentos por defecto. Por ejemplo,

int  func( int, int );
int  func( int, int, int );
int  func( int, int, float = 0.0f );
int  func( int, int, int = 0, int = 1 );

Aquí podemos tener algunos problemas. Por ejemplo,

func( 10, 12 );  // Ambiguo: func(int,int), func(int,int,int),
                 //          func(int,int,float), o func(int,int,int,int)
func( 10, 12, 14 );  // Ambiguo: func(int,int,int), func(int,int,float), o
                     //          func(int,int,int,int)
func( 10, 12, 14.0f );   // Invoca: func(int,int,float)
func( 10, 12, 14, 16 );  // Invoca: func(int,int,int,int)


Como puedes ver, el compilador tiene unos cuantos problemas para discernir la versión correcta de las funciones sobrecargadas a invocar.

Ten presente que los parámetros por defecto no cambian el prototipo de la función, simplemente ayuda al programador para que no especifique todos los parámetros. Puedes pensar que se trata de una "abreviatura" de la función. En el ejemplo anterior, el compilador se encuentra con ambigüedades porque no sabe qué parámetros por defecto siguen en la invocación. Por ejemplo,

func( 10, 12 );

Puede ser interpretado como:

func( 10, 12 );
func( 10, 12, 0.0f );
func( 10, 12, 0, 1 );

Obviamente, el compilador no es capaz de determinar cuál versión quieres usar.

Ten cuidado a la hora de diseñar tus funciones sobrecargadas si vas a usar parámetros por defecto.


Espero que esto te ayude.

Steven


Más información sobre la lista de distribución Cconclase