¿Pregunta Sobrecarga de funciones en C++?

Iniciado por Zodiak98, 17 Abril 2013, 23:54 PM

0 Miembros y 1 Visitante están viendo este tema.

Zodiak98

Hola tengo una duda sobre la sobrecarga de funciones:

Yo cree un programa con la siguiente sintaxis:

#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:

CitarDOUBLE!
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 ?

Luchoz95

no podes poner el mismo nombre a dos funciones
void holaxd(float,float);
void holaxd(double,double);

tenes que cambiarlo y ponerlo asi por ejemplo ...

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


S2!

rir3760

Cita de: Zodiak98 en 17 Abril 2013, 23:54 PM
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 (cpp) [Seleccionar]
holaxd(12.2, 12.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 (cpp) [Seleccionar]
holaxd(12.2, 12.2);
holaxd(24.2F, 24.2F);


Cita de: Zodiak98 en 17 Abril 2013, 23:54 PMOtra 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
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

pwnz

Cita de: Zodiak98 en 17 Abril 2013, 23:54 PM

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 (cpp) [Seleccionar]

double a = 11.1;
double b = 12.1;
float c = 111.1;
float d = 112.2;
holaxd(a,b);
holaxd(c,d);


o bien

Código (cpp) [Seleccionar]
holaxd((float) 12.2, (float) 12.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.

rir3760

Cita de: Luchoz95 en 18 Abril 2013, 01:10 AMno 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
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

Zodiak98

Cita de: rir3760 en 18 Abril 2013, 01:16 AM
Porque las constantes que utilizas en las dos llamadas:
Código (cpp) [Seleccionar]
holaxd(12.2, 12.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 (cpp) [Seleccionar]
holaxd(12.2, 12.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 :)

rir3760

Cita de: Zodiak98 en 18 Abril 2013, 21:03 PMhay 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
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language