很容易忘记多态的概念,因此重新整理了下笔记。先举个例子

 

有基类:

class  Base{

      public:

          virtual  void  write(char c) = 0;

          virtual  void  read() = 0;

}

注: =0 的语法表示派生类必须要实现这些函数

有派生类APad, BPad:

class  APad : public Base

{

         char  p;

   public:

         APad(char s){ p = s; }    

         ~APad(){};

 

         void  write(){

             std::cout<<"APad write";

         }

         void  read(){

             std::cout<<"APad read";

         }       

}

 

class BPad : public Base

{

        char  p;

   public:

         BPad(char s){  p = s; };

         ~BPad(){};

         void  write(){

              std::cout<<"BPad write";

         }

         void  read(){

              std::cout<<"BPad read";

         }      

}

现有函数:

void  fun(Base& a){

        a.write();

        a.read();

}

当使用函数fun时:

int    main(int  argc, char*  argv[])

{

          APad apad(‘a’);

          BPad bpad(‘b’);

          fun(apad);

          fun(bpad);

}

结果输出:

APad writeAPad read BPad writeBPad read

 

对于函数fun(), 它根本不知道派生类的存在,只知道Base,但是对于派生类也能很好的工作,子类可以转换成基类使用

多态:在基类中定义虚函数,由子类各自对函数进行实现,其它函数( 如fun() )调用时可以通过基类的虚函数来实现调用。