多态: 同一方法的行为将随上下文而不同。实现方法:
1. 在派生类中重定义基类方法
2.使用虚方法
#ifndef BRASS_H_
#define BRASS_H_
class Brass
{
private:
enum {MAX = 35};
char fullname[MAX];
long accNum;
double balance;
public:
Brass(const char* 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(){}
};
class BrassPlus :public Brass
{
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.10);
BrassPlus(const Brass &ba, double ml = 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
1.通过对象调用
Brass dom("dominic banker",1111,1111.45);
BrassPlus dot("dorothy banker",1222,222.99);
dom.ViewAcct(); // use Brass::ViewAcct();
dot.ViewAcct(); //use BrassPlus::ViewAcct();
2.通过引用和指针
如果ViewAcct不是virtual ,则
Brass dom("dominic banker",1111,1111.45);
BrassPlus dot("dorothy banker",1222,222.99);
Brass &b1_ref = dom;
Brass &b2_ref = dot;
b1_ref .ViewAcct() ; // use Brass::ViewAcct();
b2_ref.ViewAcct(); //use Brass:ViewAcct();
如果是Virtual 则
b1_ref .ViewAcct() ; // use Brass::ViewAcct();
b2_ref.ViewAcct(); //use BrassPlus::ViewAcct();