有两种方式可以实现多态公有继承
1) 在派生类中重新定义基类的方法 2) 使用虚方法 如下是使用虚方法 brass.h#ifndef BRASS_H#define BRASS_H#includeclass Brass{private: std::string fullName; //客户姓名 long acctNum; //账号 double balance; //当前结余public: Brass(const std::string & s="Nullbody",long an=-1, double bal=0.0); void Deposit(double amt); //存款 virtual void withdraw(double amt); //取款 double Balance() const; //显示余额 virtual void ViewAcct() const; virtual ~Brass() {}};//Brass Plus Account Classclass BrassPlus:public Brass{private: double maxLoan; //透支的上线 double rate; //透支贷款利率 double owesBank; //当前的透支额度public: BrassPlus(const std::string &s="Nullbody",long an=-1, double bal=0.0,double ml=500,double r=0.11125); BrassPlus(const Brass &ba,double ml=500, double r=0.11125); 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 // BRASS_H
main.cpp
#include#include "brass.h"using namespace std;//formatting stufftypedef std::ios_base::fmtflags format;typedef std::streamsize precis;format setFormat();void restore(format f,precis p);//Brass methodsBrass::Brass(const string &s, long an, double bal){ fullName=s; acctNum=an; balance=bal;}//储蓄函数void Brass::Deposit(double amt){ if(amt<0) { cout<<"Negative deposit not allowed;" <<"deposit is cancelled\n"; } else balance=balance+amt;}void Brass::withdraw(double amt){ //set up ###.##format format initialState=setFormat(); precis prec=cout.precision(2); if(amt<0) { cout<<"withdrawal amouut must be positive;" <<"withdrawal canceled\n"; } else if(amt<=balance) { balance=balance-amt; } else { cout<<"withrdrawl amout of $"< <<" exceeds your balance\n" <<"withdrawal canceled\n"; } restore(initialState,prec);}double Brass::Balance() const{ return balance;}void Brass::ViewAcct() const{ //set up ###.## format format initialState=setFormat(); precis prec=cout.precision(2); cout<<"Client:"< < >tempnum; cout<<"Enter opening balance:$"; cin>>tempbal; cout<<"Enter 1 for Brass Account or" <<"2 for BrassPlus Account:"; while(cin>>kind &&(kind!='1' && kind!='2')) cout<<"Enter either 1 or 2"; if(kind == '1') { p_clients[i]=new Brass(temp,tempnum,tempbal); } else //输入的kind是2 { double tmax,trate; cout<<"Enter the overdraft limit:$"; //overdraft 透支 cin>>tmax; cout<<"Enter the interest rate" <<"as a decimal fraction:"; cin>>trate; p_clients[i]=new BrassPlus(temp,tempnum,tempbal,tmax,trate); } while(cin.get()!='\n') continue; } //for(int i=0;i ViewAcct(); cout<
运行效果如下
开发环境Qt Creator 4.0.3 (Community)