Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Ayuda con sobrecarga de operadores

Estas en el tema de Ayuda con sobrecarga de operadores en el foro de C/C++ en Foros del Web. Hola, hice el siguiente programita: #include <iostream> #include <cstdlib> using namespace std; class fracciones{ int de,no; public: fracciones(); fracciones(int a, int b){ de=a; no=b; } ...
  #1 (permalink)  
Antiguo 12/10/2010, 13:53
 
Fecha de Ingreso: octubre-2010
Mensajes: 7
Antigüedad: 13 años, 6 meses
Puntos: 0
Exclamación Ayuda con sobrecarga de operadores

Hola, hice el siguiente programita:


#include <iostream>
#include <cstdlib>
using namespace std;
class fracciones{
int de,no;
public:
fracciones();
fracciones(int a, int b){
de=a;
no=b;
}
void salida(){
cout<<de<<"/"<<no;
}
fracciones operator *(fracciones c){
return((de*c.de),(no*c.no));
}
};
int main(int argc, char *argv[]) {
int a,b,c,d;
fracciones x,y,g;
cin>>a>>b>>c>>d;
system("CLS");
cout<<a<<"/"<<b<<endl<<c<<"/"<<d;
x=fracciones(a,b);
y=fracciones(c,d);
g=x*y;
g.salida();
return 0;
}


y me da el siguiente error: conversion from 'int' to non-scalar type 'fracciones' requested


Me podrian decir porque? Se que hay otras formas de hacer el ejercicio pero me interesa de esta forma en particular porque quiero aprender otras formas... Gracias por su ayuda!
  #2 (permalink)  
Antiguo 12/10/2010, 14:59
 
Fecha de Ingreso: enero-2008
Mensajes: 229
Antigüedad: 16 años, 3 meses
Puntos: 1
Respuesta: Ayuda con sobrecarga de operadores

el error es sencillo de resolver solo tienes que

fracciones &operator *(fracciones c){
return fracciones((de*c.de),(no*c.no));
}

ademas

fracciones();

lo deberías de poner así
fracciones():de(0),no(0){}
  #3 (permalink)  
Antiguo 12/10/2010, 16:25
 
Fecha de Ingreso: octubre-2010
Mensajes: 7
Antigüedad: 13 años, 6 meses
Puntos: 0
Exclamación Respuesta: Ayuda con sobrecarga de operadores

Cita:
Iniciado por margarito04 Ver Mensaje
el error es sencillo de resolver solo tienes que

fracciones &operator *(fracciones c){
return fracciones((de*c.de),(no*c.no));
}

ademas

fracciones();

lo deberías de poner así
fracciones():de(0),no(0){}
Che, hice lo que me dijiste pero me sigue dando error...
Que puede ser?
invalid initialization of non-const reference of type 'fracciones&' from a temporary of type 'fracciones'
  #4 (permalink)  
Antiguo 13/10/2010, 14:39
 
Fecha de Ingreso: febrero-2003
Ubicación: D.F.
Mensajes: 163
Antigüedad: 21 años, 2 meses
Puntos: 22
Respuesta: Ayuda con sobrecarga de operadores

Si estás definiendo un número racional toma en cuenta que el denominador debe ser diferente de cero, podrías utilizar un solo constructor:
Código C++:
Ver original
  1. fracciones(int a = 1, int b = 0):de(a), no(b){
  2. }

Con esto tendrías por default al número 0/1 (cero) y no el 0/0 que sería un error matemáticamente hablando.

Me parece que si la variable "de" es el denominador y "no" el númerador deberias invertir el orden de las variables en el código para que sea más claro.

Por otro lado para definir el producto es suficiente con que retornes por valor el resultado de la operación, ya que por referencia al final no obtendrás el comportamiento habitual al hacer las operaciones:
Código C++:
Ver original
  1. const fracciones operator*(const fracciones& c){
  2.         return fracciones(de * c.de, no * c.no);
  3. }

Etiquetas: operadores
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:34.