抽象基类的试例,该如何解决
抽象基类的试例
#ifndef ACCTABC_H_
#define ACCTABC_H_
//Abstract Base Class
class AcctABC
{
private:
enum{MAX=35};
char fullName[MAX];
long acctNum;
double balance;
protected:
const char *FullName()const{return fullName;}
long AcctNum()const{return acctNum;}
std::ios_base::fmtflags SetFormat()const;
public:
AcctABC(const char *s= "Nullbody ",long an=-1,
double bal=0.0); //构造函数!
void Deposit(double amt); //函数(存钱)
virtual void Withdraw(double amt)=0;//纯虚函数(取钱)
double Balance()const{return balance;};//返回所余额
virtual void ViewAcct()const=0; //纯虚函数
virtual ~AcctABC(){}
};
//Brass Account Class
class Brass:public AcctABC
{
public:
Brass(const char *s= "Nullbody ",long an=-1,
double bal=0):AcctABC(s,an,bal){}
virtual void Withdraw(double amt);
virtual void ViewAcct()const;
virtual ~Brass(){}
};
//Brass Plus Account Class
class BrassPlus:public AcctABC
{
private:
double maxLoan;
double rate;
double owesBank;
public:
BrassPuls(const char *s= "Nullbody ",long an=-1,
double bal=0.0,double m1=500,
double r=0.10);
BrassPlus(const Brass &ba,double m1=500,double r=0.1);
virtual void ViewAcct()const;
virtual void Withdraw(double amt);
void ResetMax(double m){maxLoan=m;}
void ResetRate(double r){rate=r;};
void ResetOwes(){owesBank=0;}
};
#endif
///////////////////////////////////////////////////////
/////////////////////////////////////////////////////////
#include <iostream>
#include <cstring>
#include "acctabc.h "
using std::cout;
using std::ios_base;
using std::endl;
//Abstract Base Class
AcctABC::AcctABC(const char *s,long an,double bal)
{
strncpy(fullName,s,MAX-1);
fullName[MAX-1]= '\0 ';
acctNum=an;
balance=bal;
}
void AcctABC::Deposit(double amt)
{
if(amt <0)
cout < < "Negative deposit not allowed: "
< < "deposit is cancellend.\n ";
else
balance+=amt;
}
void AcctABC::Withdraw(double amt)
{
balance-=amt;
}
//protected method
ios_base::fmtflags AcctABC::SetFormat()const
{
//set up ###.##format
ios_base::fmtflags initialState=
cout.setf(ios_base::fixed,ios_base::floatfield);
cout.setf(ios_base::showpoint);
cout.precision(2);
return initialState;
}
//Brass method
void Brass::Withdraw(double amt)
{
if(amt <0)
cout < < "Withdrawl amount must be positive; "
< < "withdrawl canceled.\n ";
#ifndef ACCTABC_H_
#define ACCTABC_H_
//Abstract Base Class
class AcctABC
{
private:
enum{MAX=35};
char fullName[MAX];
long acctNum;
double balance;
protected:
const char *FullName()const{return fullName;}
long AcctNum()const{return acctNum;}
std::ios_base::fmtflags SetFormat()const;
public:
AcctABC(const char *s= "Nullbody ",long an=-1,
double bal=0.0); //构造函数!
void Deposit(double amt); //函数(存钱)
virtual void Withdraw(double amt)=0;//纯虚函数(取钱)
double Balance()const{return balance;};//返回所余额
virtual void ViewAcct()const=0; //纯虚函数
virtual ~AcctABC(){}
};
//Brass Account Class
class Brass:public AcctABC
{
public:
Brass(const char *s= "Nullbody ",long an=-1,
double bal=0):AcctABC(s,an,bal){}
virtual void Withdraw(double amt);
virtual void ViewAcct()const;
virtual ~Brass(){}
};
//Brass Plus Account Class
class BrassPlus:public AcctABC
{
private:
double maxLoan;
double rate;
double owesBank;
public:
BrassPuls(const char *s= "Nullbody ",long an=-1,
double bal=0.0,double m1=500,
double r=0.10);
BrassPlus(const Brass &ba,double m1=500,double r=0.1);
virtual void ViewAcct()const;
virtual void Withdraw(double amt);
void ResetMax(double m){maxLoan=m;}
void ResetRate(double r){rate=r;};
void ResetOwes(){owesBank=0;}
};
#endif
///////////////////////////////////////////////////////
/////////////////////////////////////////////////////////
#include <iostream>
#include <cstring>
#include "acctabc.h "
using std::cout;
using std::ios_base;
using std::endl;
//Abstract Base Class
AcctABC::AcctABC(const char *s,long an,double bal)
{
strncpy(fullName,s,MAX-1);
fullName[MAX-1]= '\0 ';
acctNum=an;
balance=bal;
}
void AcctABC::Deposit(double amt)
{
if(amt <0)
cout < < "Negative deposit not allowed: "
< < "deposit is cancellend.\n ";
else
balance+=amt;
}
void AcctABC::Withdraw(double amt)
{
balance-=amt;
}
//protected method
ios_base::fmtflags AcctABC::SetFormat()const
{
//set up ###.##format
ios_base::fmtflags initialState=
cout.setf(ios_base::fixed,ios_base::floatfield);
cout.setf(ios_base::showpoint);
cout.precision(2);
return initialState;
}
//Brass method
void Brass::Withdraw(double amt)
{
if(amt <0)
cout < < "Withdrawl amount must be positive; "
< < "withdrawl canceled.\n ";