现在的位置: 首页 > 综合 > 正文

多态性与虚函数

2014年02月09日 ⁄ 综合 ⁄ 共 1197字 ⁄ 字号 评论关闭

多态性与虚函数       

  
   
面向对象理论中的3个术语:对象、方法和消息。对象(object):不言而喻,它是构成系统的基本单位,有属性和行为两个要素,在C++中,每个对象都是由数据函数这两部分组成的,数据即是对象的属性行为称之为方法(method),方法是对数据的操作,通常由函数实现。调用对象中的函数就是向该对象传送一个消息(message),所谓“消息”,其实就是一个命令。例如:

       stud.display();

就是向对象stud发出的一个“消息”,通知它执行其中的display“方法”(即display函数)。即:stud是对象,display()是方法,语句“stud.display();”是消息。

 

1.多态性(polymorphism)

       多态性定义:由继承而产生的相关的不同的类,向其对象发送同一个消息,不同的对象接收到后会产生不同的行为(即方法)。

       多态性分为两类:静态多态性和动态多态性。函数重载和运算符重载实现的多态性属于静态多态性,在程序编译时系统就能决定调用的是哪个函数,因此静态多态性有称为编译时的多态性。静态多态性是通过函数的重载实现的(运算符重载实质上也是函数重载)。动态多态性是在程序运行过程中才动态地确定操作所针对的对象,故称之为运行时的多态性。动态多态性是通过虚函数实现的。

关于静态多态性和动态多态性,请看下面的例子:

定义3个类:点、圆和圆柱

  1. #include <iostream.h>  
  2.   
  3. //定义Point基类  
  4. class Point  
  5. {  
  6. public:  
  7.     Point(float=0, float=0);  
  8.     void display();  
  9.     friend ostream & operator <<(ostream &, const Point &);  
  10. protected:  
  11.     float x, y;  
  12. };  
  13.   
  14. Point::Point(float a, float b)  
  15. {  
  16.     x=a; y=b;  
  17. }  
  18.   
  19. ostream & operator <<(ostream &output, const Point &p)  
  20. {  
  21.     output<<"["<<p.x<<","<<p.y<<"]"<<endl;  
  22.     return output;  
  23. }  
  24.   
  25. void Point::display()  
  26. {  
  27.     cout<<"["<<x<<","<<y<<"]"<<endl;  
  28. }  
  29.   
  30. //定义Circle基类  
  31. class Circle: public Point  
  32. {  
  33. public:  
  34.     Circle(float=0, float=0, float=0);  
  35.     float area ( ) 

抱歉!评论已关闭.