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?