Buonasera a tutti.
Sto sviluppando un semplice programma per la gestione di un conto bancario. C'è però un piccolo bug che non riesco davvero ad eliminare: azzardo a dire sia un errore del compilatore.
Posto il codice più significativo, se ve ne serve altro ditemelo.
main
codice:
int main(int argc, char** argv){
ContoCorrente conto(200, 0.3, "Mario Rossi");
cout << "Quanto vuoi prelevare?" << endl;
double N;
cin >> N;
conto.prelevaSoldi(N);
conto.show();
return 0;
}
ContoCorrente:
relevaSoldi (overload di una funzione della classe base)
codice:
void ContoCorrente::prelevaSoldi(double _importo )
{
if ( (_importo + costo_op ) <= ContoBancario::saldo ){
ContoBancario::prelevaSoldi( _importo );
ContoBancario::prelevaSoldi (costo_op);
}
else
cerr << "Non puoi prelevare più di quanto hai!" << endl;
}
Funzione della classe base
codice:
void ContoBancario::prelevaSoldi(double importo)
{
if(importo == 0)
cout << "Perché prelevare 0 euro?" << endl;
else if (importo <= saldo){
cout << importo << (importo == 1 ? " euro è stato prelevato.\n" : " euro sono stati prelevati.\n");
saldo = saldo - importo;
}
else
cerr << "Non puoi prelevare più di quanto hai!" << endl;
}
Esempio 1 :
codice:
Il conto a nome Mario Rossi contenente 200 euro è stato creato con successo.
Dati attuali:
Intestatario: Mario Rossi
Saldo: 200
Costo per operazione: 0.3
Quanto vuoi prelevare?
100
100 euro sono stati prelevati.
0.3 euro sono stati prelevati.
Il conto a nome Mario Rossi contiene 99.7 euro.
L'errore si presenta quando inserisco il saldo iniziale - costo per operazione. In questo caso, 199.70 (199.70 + 0.30 = 200)
codice:
Il conto a nome Mario Rossi contenente 200 euro è stato creato con successo.
Dati attuali:
Intestatario: Mario Rossi
Saldo: 200
Costo per operazione: 0.3
Quanto vuoi prelevare?
199.70
199.7 euro sono stati prelevati.
0.3 euro sono stati prelevati.
Il conto a nome Mario Rossi contiene 1.13798e-14 euro.
Il risultato è chiaramente ambiguo. Devo far notare che se codificassi:
codice:
void ContoCorrente::prelevaSoldi(double _importo )
{
if ( (_importo + costo_op ) <= ContoBancario::saldo ){
ContoBancario::prelevaSoldi( _importo + costo_op );
}
else
cerr << "Non puoi prelevare più di quanto hai!" << endl;
}
funziona senza problemi.
Confido nel Vs. aiuto.
Ringrazio ed ossequio,
signoredeltempo.