设为首页 加入收藏

TOP

1.4.3 纯虚函数与抽象类
2013-10-07 01:08:12 来源: 作者: 【 】 浏览:80
Tags:1.4.3 函数 抽象

1.4.3  纯虚函数与抽象类

如下声明表示一个函数为纯虚函数:

  1. class A  
  2. {  
  3. public:  
  4. virtual void Print() = 0;       // =0标志一个虚函数为纯虚函数  
  5. }; 

一个函数声明为纯虚函数后,它的意思是--我是一个抽象类!不要把我实例化!

纯虚函数用来规范派生类的行为,实际上就是所谓的"接口"。它告诉使用者:我的派生类都会有这个函数。

声明了纯虚函数的类,称为抽象类。

在使用纯虚函数时,应注意以下几个方面的问题:

抽象类中可以有多个纯虚函数。

不能声明抽象类的对象,但可以声明指向抽象类的指针变量和引用变量。

抽象类也可以定义其他非纯虚函数。

如果派生类中没有重新定义基类中的纯虚函数,则在派生类中必须再将该虚函数声明为纯虚函数。

从抽象类可以派生出具体类或抽象类,但不能从具体类派生出抽象类。

在一个复杂的类继承结构中,越上层的类抽象程度越高,有时甚至无法给出某些成员函数的实现,显然,抽象类是一种特殊的类,一般处于类继承结构的较外层。

引入抽象类的目的主要是为了能将相关类组织在一个类继承结构中,并通过抽象类来为这些相关类提供统一的操作接口。

【例1.11】设计一个抽象类Shape,它表示具有形状的东西,体现抽象的概念,在它下面可以派生出多种具体形状,比如三角形、矩形(Ex1_11)。

代码如下:

  1. #include <iostream.h>  
  2. class Shape  
  3. {   
  4. protected:  
  5. double x, y;  
  6. public:  
  7. void set(double i, double j)  
  8. { x=i; y=j; }  
  9. virtual void area() = 0;            // 声明纯虚函数    
  10. };  
  11.  
  12. class Triangle : public Shape  
  13. {  
  14. public:  
  15. void area()  
  16. { cout<< "三角形面积: " <<0.5*x*y<<endl; }    
  17. };  
  18.  
  19. class Rectangle : public Shape  
  20. {  
  21. public:  
  22. void area()  
  23. { cout<<"矩形面积:" <<x*y<<endl; }    
  24. };  
  25. void main()  
  26. {   
  27. Shape *p;  
  28. Triangle t;  
  29. Rectangle r;  
  30. p = &t;  
  31. p->set(7, 8);  
  32. p->area();     
  33. p = &r;  
  34. p->set(7, 8);  
  35. p->area();    

运行结果为:

  1. 三角形面积:28  
  2. 矩形面积:56 


【责任编辑:云霞 TEL:(010)68476606】

回书目   上一节   下一节

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇1.1.2 面向对象编程方法的基本特征 下一篇1.2.4 对象成员的初始化

评论

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