Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Zodiak98 en 17 Abril 2013, 23:54 pm



Título: ¿Pregunta Sobrecarga de funciones en C++?
Publicado por: Zodiak98 en 17 Abril 2013, 23:54 pm
Hola tengo una duda sobre la sobrecarga de funciones:

Yo cree un programa con la siguiente sintaxis:

Código:
#include <iostream>

using namespace std;

void holaxd(float,float);
void holaxd(double,double);

int main()
{
holaxd(12.2,12.2);
holaxd(24.2,24.2);

system("PAUSE");
return 0;
}

void holaxd(float n,float y)
{
cout <<"FLOAT!"<<endl;
cout << n + y << endl;
}

void holaxd(double x, double z)
{
cout <<"DOUBLE!"<<endl;
cout << x - z << endl;
}
Y al compilarlo y ejecutarlo lo que se muestra en la consola es de:

Citar
DOUBLE!
0
DOUBLE!
0

A qué se debe esto?

Porqué no trabaja con una y luego con otra?

OTRA COSA EN LA SOBRECARGA DE FUNCIONES EL CODIGO DEBE SER SIEMPRE EL MISMO O PUEDE VARIAR ?


Título: Re: ¿Pregunta Sobrecarga de funciones en C++?
Publicado por: Luchoz95 en 18 Abril 2013, 01:10 am
no podes poner el mismo nombre a dos funciones
Código
  1. void holaxd(float,float);
  2. void holaxd(double,double);
tenes que cambiarlo y ponerlo asi por ejemplo ...

Código
  1. void holaxd2(float,float);
  2. void holaxd(double,double);

S2!


Título: Re: ¿Pregunta Sobrecarga de funciones en C++?
Publicado por: rir3760 en 18 Abril 2013, 01:16 am
A qué se debe esto?

Porqué no trabaja con una y luego con otra?
Porque las constantes que utilizas en las dos llamadas:
Código
  1. holaxd(12.2, 12.2);
  2. holaxd(24.2, 24.2);
Son de tipo double y eso resulta en dos llamadas a la misma funcion.

Para obtener el resultado que esperas debes utilizar como argumentos variables de tipo float o bien utilizar constantes con el sufijo 'F'. Por ejemplo:
Código
  1. holaxd(12.2, 12.2);
  2. holaxd(24.2F, 24.2F);

Otra cosa en la sobrecarga de funciones el codigo debe ser siempre el mismo o puede variar?
Esta parte no la entendi, ¿Puedes explicarlo de una forma mas clara?

Un saludo


Título: Re: ¿Pregunta Sobrecarga de funciones en C++?
Publicado por: pwnz en 18 Abril 2013, 01:20 am

Porqué no trabaja con una y luego con otra?

OTRA COSA EN LA SOBRECARGA DE FUNCIONES EL CODIGO DEBE SER SIEMPRE EL MISMO O PUEDE VARIAR ?

No soy un experto en C++ pero  tu problema es que estas pasando los datos directamente y la aplicacion los reconoce solo como double.

Una solucion puede ser que definas antes las variables como float y double respectivamente o hagas casting. por ejemplo:

Código
  1. double a = 11.1;
  2. double b = 12.1;
  3. float c = 111.1;
  4. float d = 112.2;
  5. holaxd(a,b);
  6. holaxd(c,d);
  7.  

o bien

Código
  1. holaxd((float) 12.2, (float) 12.2);
  2. holaxd((double) 24.2, (double) 24.2);

Respecto a tu segunda pregunta cuando sobrecargas un metodo puedes poner el codigo que te de la gana si no no tendria mucho sentido xd.


Título: Re: ¿Pregunta Sobrecarga de funciones en C++?
Publicado por: rir3760 en 18 Abril 2013, 01:23 am
no podes poner el mismo nombre a dos funciones
En C++ es posible declarar funciones con el mismo nombre con la condicion de diferir en el numero o tipo de sus parametros. A ello se le conoce como sobrecarga de funciones (de ahi el titulo de este tema).

Un saludo


Título: Re: ¿Pregunta Sobrecarga de funciones en C++?
Publicado por: Zodiak98 en 18 Abril 2013, 21:03 pm
Porque las constantes que utilizas en las dos llamadas:
Código
  1. holaxd(12.2, 12.2);
  2. holaxd(24.2, 24.2);
Son de tipo double y eso resulta en dos llamadas a la misma funcion.

Para obtener el resultado que esperas debes utilizar como argumentos variables de tipo float o bien utilizar constantes con el sufijo 'F'. Por ejemplo:
Código
  1. holaxd(12.2, 12.2);
  2. holaxd(24.2F, 24.2F);

Hola gracias, me sirvio lo de la F pero ahora solo por curiosidad hay alguna otra letra aparte de la F o solo es la F para identificar por ejemplo en este caso?

Citar
Esta parte no la entendi, ¿Puedes explicarlo de una forma mas clara?

Un saludo

Esta parte omitela ya la capte es algo tonto haber preguntado eso hehe :)


Título: Re: ¿Pregunta Sobrecarga de funciones en C++?
Publicado por: rir3760 en 19 Abril 2013, 01:31 am
hay alguna otra letra aparte de la F o solo es la F para identificar por ejemplo en este caso?
Con las constantes enteras puedes utilizar los sufijos U (unsigned) y L (long) y con las de punto flotante puedes utilizar F (float) y L (long double). Se puede utilizar en mayúsculas o minúsculas.

Un saludo