该带码依照 C++ primer plus 第5版 13.6.1应用。
头文件
抽象基类,Brass公有派生类和BrassPlus公有派生类
抽象基类简述
类AcctABC为抽象基类,所谓抽象基类不能生成实例,即不能生成对象。
该类有三个私有成员:分别是名字,银行账户,存款金额。
保护成员方法:显示名字,显示账户,以及显示格式重置函数
公有成员方法:构造函数,存款函数,纯虚取款函数,获取存款金额,纯虚账户信息显示函数,虚拟析构函数(必须设置为虚函数,试指针可以准确定析构对于的对象)
Brass派生类
公有成员方法:构造函数,虚拟取款函数(必须,基类定义为纯虚函数),虚拟账户显示函数(必须,基类定义为纯虚函数),虚拟析构函数
BrassPlus派生类
私用成员:最大贷款金额,贷款利率,还贷金额
公有成员方法: 构造函数,虚拟取款函数(必须,基类定义为纯虚函数),虚拟账户显示函数(必须,基类定义为纯虚函数),虚拟析构函数,以及设置最大贷款金额函数,设置贷款利率函数,设置还贷金额函数。
三个类的头文件
// acctabc.h -- bank account classes #ifndef ACCTABC_H_ #define ACCTABC_H_ // Abstract Base Class class AcctABC { private: enum {MAX = 32}; char fullName[MAX]; long acctNum; double balance; protected: const char * FullName(void) const {return fullName;} long AcctNum(void) const {return acctNum;} std::ios_base::fmtflags SetFormat(void) const; public: AcctABC(const char * s = "Nullbody", long an = -1, double bal = 0.0); void Deposit(double amt); virtual void Withdraw(double amt) = 0; // pure virtual function double Balance(void) const {return balance;} virtual void ViewAcct(void) const = 0; // pure virtual function virtual ~AcctABC(void) {} }; // Brass Account Class class Brass: public AcctABC { public: Brass(const char * s = "NullBody", long an = -1, double bal = 0.0): AcctABC(s, an, bal) {} virtual void Withdraw(double amt); virtual void ViewAcct(void) const; virtual ~Brass(void) {} }; // Brass Plus Account Class class BrassPlus: public AcctABC { private: double maxLoan; double rate; double owesBank; public: BrassPlus(const char * s = "Nullbody", long an = -1, double bal = 0.0, double ml = 500, double r = 0.1); BrassPlus(const AcctABC & ba, double ml = 500, double r = 0.1); virtual void ViewAcct(void) const; virtual void Withdraw(double amt); void ResetMax(double m) {maxLoan = m;} void ResetRate(double r) {rate = r;} void ResetOwes(void) {owesBank = 0;} }; #endif//ACCTABC_H_