Class Declarations for BankAccount
class Account
{
public:
enum {SAVINGS,CHECKING};
static Account* create(Account *);
virtual void read(istream &)=0;
virtual void write(ostream & )=0;
virtual void print()=0;
virtual void deposit(double)=0;
virtual void withdraw(double)=0;
private:
virtual double computeInterest()=0;
virtual Account* clone()=0;
};
typedef RcPointer < Account > AcctPtr;
class SavingsAccount :public Account
{
public:
SavingsAccount();
SavingsAccount(int id,double amount);
virtual void read(istream &);
virtual void write(ostream & );
virtual void print();
virtual void deposit(double);
virtual void withdraw(double);
int operator == (const SavingsAccount &)const;
int operator == (int )const;//search for an existing account by number
private:
virtual double computeInterest();
virtual Account* clone();
int _acctNumber;
double _balance;
static double _interestRate;
};
class CheckingAccount :public Account
{
public:
CheckingAccount();
CheckingAccount(int, double);
virtual void read(istream &);
virtual void write(ostream & );
virtual void print();
virtual void deposit(double);
virtual void withdraw(double);
int operator == (const CheckingAccount &)const;
int operator == (int )const;//search for an existing account by number
private:
virtual double computeInterest();
virtual Account* clone();
int _acctNumber;
double _balance;
};
class AccountArray
{
public:
AccountArray();
void read();
void write();
void print();
// other things not important for this example
private:
Array < AcctPtr > accts;
};