none
Problemas con operator: RRS feed

  • Pregunta

  • Bueno tengo unos problemas ya que programe este codigo y me expulsa una serie de errores que no logro comprender, si alguien puede solucionar el problema seria muy bueno, de ante mano muchas gracias.

    class Fraccion
    {
    private:
    int numerador;
    int denominador;
    double todo;
    public:
    Fraccion();
    Fraccion(int);
    Fraccion(int,int);
    int getNum() const;
    int getDenom() const;
    Fraccion operator+(const Fraccion& f2) const;
    Fraccion operator-(const Fraccion& f2) const;
    Fraccion operator*(const Fraccion& f2) const;
    Fraccion operator/(const Fraccion& f2) const;
    Fraccion operator-() const;
    bool operator==(const Fraccion& f2) const;
    int reducir(int,int);
    void estandar();
    };

    Fraccion Fraccion::operator+(const Fraccion& f2) const
    {
    Fraccion AUX;
    if(getDenom()==f2.getDenom());
    AUX((getNum()+f2.getNum())/getDenom());
    else
    AUX(getNum()*f2.getDenom()+getDenom()*f2.getNum())/getDenom()*f2.getDenom();
    return AUX;
    }
    Fraccion Fraccion::operator-(const Fraccion& f2) const
    {
    Fraccion AUX;
    if(getDenom()==f2.getDenom())
    AUX(getNum()-f2.getNum())/getDenom();
    else
    AUX(getNum()*f2.getDenom()-getDenom()*f2.getNum())/getDenom()*f2.getDenom();
    return AUX;
    }
    Fraccion Fraccion::operator*(const Fraccion& f2) const
    {
    Fraccion AUX;
    AUX(getNum()*f2.getNum())/getDenom()*f2.getDenom();
    return AUX;
    }
    Fraccion Fraccion::operator/(const Fraccion& f2) const
    {
    Fraccion AUX;
    AUX(getNum()*f2.getDenom())/(f2.getNum()*getDenom());
    return AUX;
    }
    Fraccion Fraccion::operator-() const
    { Fraccion AUX;
    if(getNum()>0 && getDenom()>0)
    {
    AUX(-1*(getNum()/getDenom()));
    return AUX;
    }
    if(getNum()<0 && getDenom()<0)
    {
    AUX(-1*(getNum()/getDenom()));
    return AUX;
    }
    if (getNum()>0 && getDenom()<0)
    {
    AUX(-1*(getNum()/getDenom()));
    return AUX;
    }
    if (getNum()<0 && getDenom()>0)
    {
    AUX(-1*(getNum()/getDenom()));
    return AUX;
    }
    if (getNum()==0)
    {
    AUX(0);
    return AUX;
    }
    }
    bool Fraccion::operator==(const Fraccion& f2) const
    {
    Fraccion AUX1;
    Fraccion AUX2;
    AUX1(getNum()/getDenom());
    AUX2(f2.getNum()/f2.getDenom());
    if(AUX1==AUX2)
    return true;
    else
    return false;
    }
    int Fraccion::reducir(int a, int b) const
    {
    if (b == 0)
    return a;
    else
    return reducir(b, a % b);
    }
    void Fraccion::estandar()
    {
    if(getNum()>0 && getDenom()<0)
    cout<<-1*getNum()<<"/"<<-1*getDenom()<<endl;
    if (getNum()<0 && getDenom()>0)
    cout<<-1*getNum()<<"/"<<-1*getDenom()<<endl;
    if (getNum()<0 && getDenom()<0)
    cout<<-1*getNum()<<"/"<<-1*getDenom()<<endl;
    if(getNum()==0)
    cout<<getNum();
    }

    viernes, 5 de octubre de 2012 18:37

Respuestas

  • He vuelto a releer tu código y utilizas mal los constructores:
    //esto está mal
    Fraccion AUX;
    AUX(ValorA/ValorB);
    

    // debes hacer Fraccion AUX(ValorA, ValorB);


    sábado, 6 de octubre de 2012 12:54

Todas las respuestas

  • Aunque usted no comprenda los errores igualmente debe transcribirlos aquí pues alguien más sí los comprenderá.  Asegúrese también en la medida de lo posible indicar la línea exacta a la cual se refiere el error.

    También agradeceremos que utilice la herramienta de inserción de código de este foro (luce como una hoja de papel con "<>" al frente).  De esta forma el código estará formateado y será más fácil de leer.


    Jose R. MCP
    Code Samples


    viernes, 5 de octubre de 2012 19:28
    Moderador
  • Como dice webJose, te recomiendo el uso del penúltimo icono "Insertar bloque de código". Una vez dicho esto, y sin saber los errores del compilador, aqui van algunos consejos:

    Las funciones getNum() y getDenom() son para usarlas desde fuera de Fraccion. Todas las funciones mienbros de Fraccion puedes usar directamente numerador y denominador, el código será mas legible.

    Cuando defines todos los AUX, utilizas

    Fraccion AUX(UnValorInt/OtroValorInt);

    Lo que estás haciendo es dividir el primer valor por el segundo y el resultado, convertido a int, llama al constructor Fraccion(int). No creo que sea lo que pretendas. debes utilizar:

    Fraccion AUX(UnValorInt, OtroValorInt);

    Para finalizar, la comparación que haces para la igualdad es recursiva e infinita. Lo que debes hacer es, por ejemplo:

    bool Fraccion::operator==(const Fraccion F) const
    {
    return (numerador * F.denominador) == (F.numerador * denominador);
    }


    • Editado Bartomeu sábado, 6 de octubre de 2012 12:22
    sábado, 6 de octubre de 2012 12:21
  • He vuelto a releer tu código y utilizas mal los constructores:
    //esto está mal
    Fraccion AUX;
    AUX(ValorA/ValorB);
    

    // debes hacer Fraccion AUX(ValorA, ValorB);


    sábado, 6 de octubre de 2012 12:54