Sto progettando una classe Fraction, che deve contenere un numero in formato frazionario.
Per ora gli ho fatto il calpo value che è un double, ma ho provato a fare l' overloading dell' operatore >> per prendere un valore in input:
codice:
#include <iostream>

using namespace std;

class Fraction
{
    public:
    Fraction();
    Fraction(double value);
    Fraction(float value);
    Fraction(int value);
    void set(double value);
    void set(float value);
    void set(int value);
    double value;
};


Fraction::Fraction()
{
    value=0.0;
}


Fraction::Fraction(double value)
{
    this->value=value;
}

Fraction::Fraction(float value)
{
    this->value=(double)value;
}

Fraction::Fraction(int value)
{
    this->value=(double)value;
}

void Fraction::set(double value)
{
    this->value=value;
}

void Fraction::set(float value)
{
    this->value=(double)value;
}

void Fraction::set(int value)
{
    this->value=(double)value;
}

istream &operator>> (istream &input, Fraction *f)
{
    input >> f->value;
    return input;
}

int main(int argc, char **argv)
{
    Fraction *f;
    f=new Fraction(4.5);
    cin>>f;
    cout<<f->value<<endl;
    return 0;
}
codice:
istream &operator>> (istream &input, Fraction *f)
{
    input >> f->value;
    return input;
}
Ma il problema è proprio quando vado a fare l' overloding: il campo l' ho messo pubblico perchè altrimenti mi dice che non può accedere a un campo privato.
Mi chiedo se non c'è un modo di scavalcare questa cosa, come hanno fatto ad esempio con la classe string.Sapete come fare?