在花费了很多的时间学习多态之后,我们有必要通过一个示例向读者展示多态技术在实践中不可或缺的重要价值。我们从大家常用的文字编辑软件说起。
本文引用自作者编写的下述图书; 本文允许以个人学习、教学等目的引用、讲授或转载,但需要注明原作者"海洋饼干叔
叔";本文不允许以纸质及电子出版为目的进行抄摘或改编。
1.《Python编程基础及应用》,陈波,刘慧君,高等教育出版社。免费授课视频 Python编程基础及应用
2.《Python编程基础及应用实验教程》, 陈波,熊心志,张全和,刘慧君,赵恒军,高等教育出版社Python编程基础及应用实验教程
3. 《简明C及C++语言教程》,陈波,待出版书稿。免费授课视频
要点🎯 | 抽象类的最大用途在于为相关的扩展类定义一个统一的接口(interface)。 |
---|
想象一个Word类软件,WPS或者Open Office之类,用户会加入非常多的界面元素在文档中,包括但不限于:三角形、箭头、段落、圆形、矩形、艺术字、图片。在面向对象程序设计中,这些元素都会使用类来描述,并且,设计者一定会为这些界面元素提供一个统一的父类。作者把这个类结构简化成图18-6的模样,读者要明白真实的情况比这个要复杂得多,但基本结构大体如此。
可以看到,所有的界面元素,三角形、圆形、… 、文本段落(paragraph),被描述成拥有一个共同的祖先类(Shape)。这个祖先类可以是抽象类,这意味着系统不允许你创建Shape类的对象。抽象类什么具体的工作也不做,只是描述了他的全部后代的模样:至少实现描绘自身的draw()以及获取元素在页面中的空间尺寸的getSize()这两个方法。这种描述是强制性的,它的后代必须实现这两个方法或函数。
Triangle类用三个点坐标来描述自己的结构,除了实现必须的draw()和getSize()方法外,还实现了一个getArea()方法以计算自身所占面积。Circle类则用一个圆心坐标以及一个半径来描述自己,也实现了额外的getArea()函数。文本段落(Paragraph)类则用一个字符串sContent来存储其文本内容,还额外实现了setFont()函数来设置文本的字体和字号。
下述C++代码给出了上述继承结构的极简版实现。
//Project - Word
...
class Shape {
public:
//virtual Size getSize() = 0;
virtual void draw() = 0;
virtual ~Shape(){
}
};
class Triangle:p