设为首页 加入收藏

TOP

2.2.7 虚函数与多态性、纯虚函数(3)
2013-10-07 15:20:12 来源: 作者: 【 】 浏览:74
Tags:2.2.7 函数 多态性

2.2.7  虚函数与多态性、纯虚函数(3)

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

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

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

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

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

2.纯虚函数

将breathe()函数申明为纯虚函数,结果如例2-18所示。

例2-18

  1. class animal  
  2. {  
  3. public:  
  4.     void eat()  
  5.     {  
  6.         cout<<"animal eat"<<endl;  
  7.     }  
  8.     void sleep()  
  9.     {  
  10.         cout<<"animal sleep"<<endl;  
  11.     }  
  12.     virtual void breathe() = 0;  
  13. };  

纯虚函数是指被标明为不具体实现的虚成员函数(注意:纯虚函数也可以有函数体,但这种提供函数体的用法很少见)。纯虚函数可以让类先具有一个操作名称,而没有操作内容,让派生类在继承时再去具体地给出定义。凡是含有纯虚函数的类叫做抽象类。这种类不能声明对象,只是作为基类为派生类服务。在派生类中必须完全实现基类的纯虚函数,否则,派生类也变成了抽象类,不能实例化对象。

纯虚函数多用在一些方法行为的设计上。在设计基类时,不太好确定或将来的行为多种多样,而此行为又是必需的,我们就可以在基类的设计中,以纯虚函数来声明此种行为,而不具体实现它。

注意:C++(www.cppentry.com)的多态性是由虚函数来实现的,而不是纯虚函数。在子类中如果有对基类虚函数的覆盖定义,无论该覆盖定义是否有virtual关键字,都是虚函数。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇2.2.4 函数的重载 下一篇2.2.7 虚函数与多态性、纯虚函数..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: