In un programma C++ ho un codice per stampare un oggetto di una classe chiamata frazione. Le sue variabili sono n (il numeratore), d (il denominatore) e il sinale (segnale: vero quando una frazione è positiva e falsa altrimenti).iomanip con un oggetto di una classe
ostream &operator << (ostream &os, const fraction &x){//n=0
if(!x.sinal)
os << "-";
os << x.n;
if(x.d!=1 && x.n!=0)
os << "/" << x.d;
return os;
}
Si fa un buon lavoro, ma quando provo ad usare un setw() in esso, non funziona correttamente: colpisce solo il primo oggetto da stampare (se è il segnale o il numeratore).
Ho provato a cambiare e la soluzione che ho trovato è stato il primo a convertirlo in una stringa e quindi utilizzando il sistema operativo con un iomanip:
ostream &operator << (ostream &os, const fraction &x){//n=0
string xd, xn;
stringstream ssn;
ssn << x.n;
ssn >> xn;
stringstream ssd;
ssd << x.d;
ssd >> xd;
string sfra = "";
if(!x.sinal)
sfra += "-";
sfra += xn;
if(x.d !=1 && x.n != 0){
sfra += "/";
sfra += xd;
}
os << setw (7) << left << sfra;
return os;
}
Questo funziona, ma ovviamente io non sono in grado di cambiare la larghezza che avrà una frazione: sarà 7 per tutti loro. C'è un modo di cambiarlo? Ho davvero bisogno di usare diverse larghezze per diverse frazioni. Grazie in anticipo.
Questo è sorprendente! Grazie mille. – ahgert