jlz

  C++博客 :: 首页 :: 联系 :: 聚合  :: 管理
  0 Posts :: 13 Stories :: 0 Comments :: 0 Trackbacks

常用链接

留言簿

我参与的团队

搜索

  •  

最新评论

  多态: 同一方法的行为将随上下文而不同。实现方法:
  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();

  
 

posted on 2008-09-21 16:39 jz 阅读(101) 评论(0)  编辑 收藏 引用 所属分类: c++ primer plus 读书笔记