设为首页 加入收藏

TOP

9.6.4 纯虚函数
2013-10-07 12:38:56 来源: 作者: 【 】 浏览:61
Tags:9.6.4 函数

9.6.4  纯虚函数

下面描述的情形是可能的:我们希望在基类中包括一个虚函数,这样就可以在派生类中为适应派生类对象而重新定义该函数,但我们在基类中却无法给予该函数任何有意义的定义。

例如,我们可能有一个CContainer类,它可以用作定义CBox类、CBottle类乃至CTeapot类的基类。CContainer类将没有数据成员,但我们可能希望为任何派生类提供一个虚成员函数Volume()。因为CContainer类没有任何数据成员,因此也没有尺寸,所以我们不能为Volume()函数写出什么有意义的定义。然而,我们仍然能够定义这个类-- 当然包括成员函数Volume(),CContainer类定义的代码如下所示:

  1. // Container.h for Ex9_10  
  2. #pragma once  
  3. #include <iostream> 
  4. using std::cout;  
  5. using std::endl;  
  6.  
  7. class CContainer        // Generic base class for specific containers  
  8. {  
  9. public:  
  10. // Function for calculating a volume - no content  
  11. // This is defined as a 'pure' virtual function, signified by '= 0'  
  12. virtual double Volume() const = 0;  
  13.  
  14. // Function to display a volume  
  15. virtual void ShowVolume() const  
  16. {  
  17. cout << endl 
  18. << "Volume is " << Volume();  
  19. }  
  20. }; 

定义虚函数Volume()的语句通过在函数头中添加等号和0,将该函数定义成没有任何内容。这样的函数被称为纯虚函数。该类的任何派生类都必须要么定义Volume()函数,要么重新将其定义成纯虚函数。因为我们已经将Volume()声明为const,所以在任何派生类中该函数的实现也都必须是const。记住,即使名称和形参列表相同,但函数的const和非const变体也是不同的函数。换句话说,我们可以使用const来重载函数。

该类还包含一个显示派生类对象体积的函数ShowVolume()。因为该函数被声明为virtual,所以在派生类中当然可以被替换。但是如果不进行替换,则程序将调用这里的基类版本。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇9.5 友元类成员 下一篇9.6.6 间接基类

评论

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