Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





¿Cómo hacer una función con parámetros opcionales?

Iniciado por J_F_NASH, 31 de Marzo de 2007, 04:06:43 PM

« anterior - próximo »

J_F_NASH

Necesito crear una función a la cual se le puedan pasar 2 parametros PERO que si no le paso ninguno no me de error. ¿esto es posible hacerlo? y ¿si lo es que nombre recibe esto?

S2.

gdl

Muchos lenguajes permiten realizar sobrecarga de funciones (que es lo que quieres). En ese caso, las funciones con distinto número de argumentos se consideran distintas.

Por ejemplo, en C++

void funcion(int a);
void funcion(void);


El código de esta función es distinto según tenga un argumento o ninguno.

void funcion(int a)
{
//hace algo
}

void funcion(void)
{
//hace otra cosa
}


A la hora de usarlo, es transparente y da la impresión de un argumento opcional.

funcion(3);//Llama a funcion(int)
funcion();//Llama a funcion()


Es la labor del programador hacer que, ya que tienen el mismo nombre, lo que hagan esas funciones sea consistente y que en efecto parezca que una es la otra con un argumento opcional.

fiero

¿Que tal si les das un valor por defecto a esos dos parámetros en la cabecera (.h)?

un saludo
www.videopanoramas.com Videopanoramas 3D player

shephiroth

Buenas.

GDL a eso se le llama sobrecarga, mientras lo q esta pidiendo es mas dejarles un valor defecto.

FIERO exacto. Para poner un poco de codigo y poco de "reglas" de uso, veamos:

void func1(char* uno, int a=10, int b=10);
void func2(char* uno, int a=10, int b);
void func3(char* uno, int b, int a=10);

Veamos, en la func1 tenemos una variable necesaria y dos opcionales. Puedes no pasarle ni a ni b, pasarle a, o pasarle ambas. Si hay una manera de pasarle solo b no la conozco.
En la func2 tenemos la variable uno normal, a como opcional y b como normal.....ESTO ESTA MAL!!!!!! Siempre tendras que pasarle los 3 valores,  por lo q pierde la funcionalidad que estabas buscando.
En func3 tienes la solucion, poner b antes que a.

Resumiendo, los parametros opcionales SIEMPRE LOS ULTIMOS y ordenados por importancia.

Si quieres mas potencia tendrías que ir al codigo de GDL, pero ya digo que eso es sobrecarga de funciones, en ningun caso dar valores por defecto.

SALUDOS ^^

J_F_NASH

Cita de: "shephiroth"Buenas.

GDL a eso se le llama sobrecarga, mientras lo q esta pidiendo es mas dejarles un valor defecto.

FIERO exacto. Para poner un poco de codigo y poco de "reglas" de uso, veamos:

void func1(char* uno, int a=10, int b=10);
void func2(char* uno, int a=10, int b);
void func3(char* uno, int b, int a=10);

Veamos, en la func1 tenemos una variable necesaria y dos opcionales. Puedes no pasarle ni a ni b, pasarle a, o pasarle ambas. Si hay una manera de pasarle solo b no la conozco.
En la func2 tenemos la variable uno normal, a como opcional y b como normal.....ESTO ESTA MAL!!!!!! Siempre tendras que pasarle los 3 valores,  por lo q pierde la funcionalidad que estabas buscando.
En func3 tienes la solucion, poner b antes que a.

Resumiendo, los parametros opcionales SIEMPRE LOS ULTIMOS y ordenados por importancia.

Si quieres mas potencia tendrías que ir al codigo de GDL, pero ya digo que eso es sobrecarga de funciones, en ningun caso dar valores por defecto.

SALUDOS ^^

Si, eso es exactamente lo que buscaba.
Aunque gracias también por la explicación de sobrecarga de funciones puede que me sea útil.


Gracias.

gdl

Cita de: "shephiroth"Buenas.

GDL a eso se le llama sobrecarga, mientras lo q esta pidiendo es mas dejarles un valor defecto.



Tienes razón. Hay días que me paso con el anís. Jajajajaja

Pogacha

En realidad ambas eran validas ...

void func(int a) { hacer algo }
inline void func() { func(0); }


Los parametros por defecto fueron agregados por conveniencia mas que por necesidad.

Y ademas tampien existe el "..." que te permite usar un numero variable y de tipos indefinidos de datos. Vease el conjunto de flujo standart de C. (printf, scanf and so). Obviamente esto requiere un conocimineto avanzado del proceso de compilación.

Saludos.






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.