C++ - Duda de sobrecarga del operador =

dagavi

Buenas, trasteando con las clases en C++ estaba realizando una clase para operar con números racionales hasta que me he topado con una duda:

¿Como podría sobrecargar el operador = para poder declarar un racional e inicializarlo de forma inmediata desde el código?

Es decir, que yo pueda escribir:

Racional a = 3/4;

La gracia estaría en poder escribir el 3/4 dentro del código (o otro formato, ej 3 4, pero si puede llevar barra mejor).
Ya se que puedo crear la función Racional a (3, 4) o cosas por el estilo, pero la gracia está en que sea más directo, igual que podemos hacer int x = 4, float y = 4.243 o string p = "Hola"

r2d2rigo

void Racional :: operator=(float valor);

Tanto el valor de retorno como el parametro pueden ser del tipo que tu quieras. El parametro es lo que pondrias "a la derecha" del =, no se si me explico:

Racional r;
(aqui estaria el valor de retorno) r = 3/4 (esto es el parametro "valor");

dagavi

Pero al hacer float valor el 3/4 pasaría a ser 0.75 ¿no?

Yo tengo la clase creada:
int num, den; // Numerador denominador

Y a mi me gustaría que se pasara "directamente", el 3 pasa a num y el 4 a den (no se si con el float se puede mantener la representación racional o no)

javithelong

Tendrías que coger el 0.75 y cambiarlo por un 75 / 100 y luego simplificarlo (si tienes algún método por ahi).

Pero me parece trabajo absurdo XD

dagavi

Pues si xD Me esperaba que hubiera algún método en plan:

paso al = un int a, un char b y un int c [pero sería todo pegado x/b]

Lo que entonces simplemente seria decir num=a y den = c

Otra forma que si creo que se podría implementar y más fácil que transformar un decimal sería pasar un string.

El numerador es todo lo que hay delante del / y detrás el denominador. En este caso casi que no me haría falta ni identificar casos de si me pasan un INT o un Racional, puesto que se puede inicializar el denominador siempre a 1 y modificarlo si se encuentra una / dentro del string. [que ganas tengo de complicarme la vida sin necesidad xD]

dr_Rouman

¿Y sobrecargando el operador "/" ?

Lo digo como idea, no se si se podrá o no...

SeiYa

#6 No puede sobrecargar el operador / para números enteros o flotantes, puede sobrecargarlo para las clases (u objetos) que él cree pero no para los tipos de datos primitivos.

mi consejo, que reciba un string "3/4" y acabas antes, si lo pones como número sin más vas a tener problemas, a no ser que te crees una clase numero y ...

Usuarios habituales

  • SeiYa
  • dr_Rouman
  • dagavi
  • javithelong
  • r2d2rigo