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.