龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > VC开发 >

VC++深入详解:虚函数与多态性[组图](3)

时间:2009-12-30 15:42来源:未知 作者:admin 点击:
分享到:
}; class fish:public animal { public: void breathe() { cout"fish bubble"endl; } }; void fn(animal *pAn) { pAn-breathe(); } void main() { animal *pAn; fish fh; pAn=fh; fn(pAn); } 用virtual关键字申明
  };
  class fish:public animal
  {
  public:
     void breathe()
     {
       cout<<"fish bubble"<<endl;
     }
  };
  void fn(animal *pAn)
  {
     pAn->breathe();
  }
  void main()
  {
     animal *pAn;
     fish fh;
     pAn=&fh;
     fn(pAn);
  }


  用virtual关键字申明的函数叫做虚函数。运行例2-17这个程序,结果调用的是fish类的呼吸方法:

图2.14 EX08程序的运行结果(二)

  这就是C++中的多态性。当C++编译器在编译的时候,发现animal类的breathe()函数是虚函数,这个时候C++就会采用迟绑定(late binding)技术。也就是编译时并不确定具体调用的函数,而是在运行时,依据对象的类型(在程序中,我们传递的fish类对象的地址)来确认调用的是哪一个函数,这种能力就叫做C++的多态性。我们没有在breathe()函数前加virtual关键字时,C++编译器在编译时就确定了哪个函数被调用,这叫做早期绑定(early binding)。

  C++的多态性是通过迟绑定技术来实现的,关于迟绑定技术,读者可以参看相关的书籍,在这里,我们就不深入讲解了。

  C++的多态性用一句话概括就是:在基类的函数前加上virtual关键字,在派生类中重写该函数,运行时将会根据对象的实际类型来调用相应的函数。如果对象类型是派生类,就调用派生类的函数;如果对象类型是基类,就调用基类的函数。

精彩图集

赞助商链接