
Originariamente inviata da
oregon
Per evitare equivoci e facilitare la correzione puoi postare tutto il codice in maniera che sia compilabile al primo colpo?
Eccoli:
Conto Bancario.h
codice:
//classe base
#ifndef Conto_Bancario_H
#define Conto_Bancario_H
#include <iostream>
#include <string>
class ContoBancario
{
protected:
double saldo;
std::string proprietarioConto;
public:
void show() const;
ContoBancario(double , std::string);
std::istream& operator>>(double ); //deposita sul conto
void prelevaSoldi(double );
};
#endif // Conto_Bancario_H
Conto Corrente.h
codice:
#ifndef CONTO_CORRENTE_H
#define CONTO_CORRENTE_H
#include "Conto Bancario.h"
#include <iostream>
#include <string>
using std::string;
using std::istream;
using std::ostream;
class ContoCorrente : public ContoBancario
{
public:
/*
* Contocorrente
* @param
* 1 Saldo inziale = 0.0
* 2 Costo per ogni operazione = 0.0
* 3 Intestatario conto = ""
*/
ContoCorrente(double = 0.0, double = 0.0, string = ""); //avverti in caso di 0 per parametro due
void prelevaSoldi(double);
private:
double costo_op;
};
#endif
Conto Bancario.cpp
codice:
#include "Conto Bancario.h"
#include <string>
#include <iostream>
using namespace std;
ContoBancario::ContoBancario(double _saldo, string proprietario)
{
saldo = (_saldo > 0 ? _saldo : 0);
proprietarioConto = (proprietario.length() > 0 ? proprietario : "");
if (saldo != 0 && proprietarioConto.length() >= 0)
{
std::cout << "Il conto a nome " << proprietarioConto << " contenente " << saldo << " euro è stato creato con successo." << endl;
}
}
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;
}
istream& ContoBancario::operator>>(double importo)
{
saldo = saldo + importo;
cout << importo << (importo > 1 ?" euro sono stati aggiunti.\n" : " euro è stato aggiunto.\n" );
}
void ContoBancario::show() const
{
cout << "Il conto a nome " << proprietarioConto
<< " contiene " << saldo << " euro."<< endl;
}
Conto Corrente.cpp
codice:
#include <iostream>
#include "Conto Bancario.h"
#include "Conto Corrente.h"
#include <cstdlib>
using namespace std;
ContoCorrente::ContoCorrente(double saldo , double costoOP , string owner ) : ContoBancario(saldo, owner )
{
if (costoOP < 0){
cout << "Il costo per operazione non può essere inferiore di 0." << endl;
exit(-1);
}
else
costo_op = costoOP;
cout << "Dati attuali:" << endl
<< "\tIntestatario: " << ContoBancario::proprietarioConto << endl
<< "\tSaldo: " << ContoBancario::saldo << endl
<< "\tCosto per operazione: " << costo_op << endl;
}
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;
}
Ma che fine hanno fatto gli spoiler?