- 1、本文档共8页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C第6章多的态性和虚函数
第6 章 多态性和虚函数
面向对象理论中的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 ( ) const;
36. void display();
37. friend ostream operator (ostream , const Circle );
38. protected :
39. float radius;
40. };
41.
42. Circle::Circle(float a,float b,float r):Point(a,b),radius(r){ }
43.
44. float Circle::area( ) const
45. { return 3.14159*radius*radius; }
46.
47. ostream operator (ostream output, const Circle c)
48. {
49. outputCenter=[c.x,c.y], r=c.radius, area=c.area(
)endl;
50. return output;
51. }
52.
53. void Circle::display()
54. {
55. coutCenter=[x,y], r=radius, area=area( )endl;
56. }
57.
文档评论(0)