10.15 自助练习题
10.2 什么是虚函数?举一个适合使用虚函数的例子。
10.3 构造函数不能是虚函数。怎样使构造函数具有虚函数的效果?
10.4 多态如何让程序 一般化 而不是 特殊化。说明 一般化 编程的主要好处。
10.5 说明用 switch 逻辑编程的问题。请解释为什么多态可以代替 switch 逻辑。
10.6 区分静态关联与动态关联。请解释动态关联中虚函数和 vtable 的用法。
10.7 区分继承接口与继承实现的方法,继承接口的继承层次设计与继承实现的继承层次设计有什么不同?
10.8 区分虚函数与纯虚函数。
10.9 (判断对错)抽象基类中所有虚函数都要声明为纯虚函数。
10.10 对本章介绍的 Shape 层次提出一层或几层抽象基类(第一层是 Shape,第二层包括类 TwoDimensionalShape 和 ThreeDimensionalShape)。
10.11 多态如何促进可扩展性?
10.12 要求开发一个详细描述图形输出的飞行模拟程序。说明多态对这类问题为什么特别有用。
10.13 开发一个基本图形包。用 Shape 类继承层次,只限于二维形状,如正方形、长方形、三角形和圆。并与用户交互,让用户指定每个形状的位置、尺寸、形状和填充字符。用户可以指定多个同一形状的项目。生成每个形状时,将每个新Shape对象的 Shape* 指针放在数组中。每个类有自己的draw成员函数。编写一个多态屏幕管理程序,遍历数组(可 用迭代器)。向数组中的每个对象发一个draw消息,形成屏幕图形。每次用户指定新形状时,重新输出屏幕图形。
10. 14 修改图 10.1 的工资系统,增加private数据成员 birthData(Date对象) 和 departmentCode(int类型)到 Employee 中。假设工资系统每月处理一次。这样,程序计算每个员工的工资时(多态),遇到过生日的员工多发100美元奖金。
10.15 练习 9.14 开发了形状类 Shape 的层次结构,并在该结构中定义了若干类。修改该层次结构,使 Shape 成为一个包含接口(供层次结构中的类使用)的抽象基类。从类 Shape 派生出二维形状类 TwoDimensionalShape 和三维形状类 ThreeDimensionalShape,它们也都是抽象类,然后用虚函数 print 输出每个类的类型和维数。为了计算类层次结构中每个具体类的对象,这两个类中还要包括虚函数 are 和 volume。最后再编写一个驱动程序测试类Shape的层次结构。