《第9章虚函数和多态》课后作业1、设计一个抽象基类Worker,并从该基类中派生出计时工人类HourlyWorker和计薪工人类SalariedWorker。每名工人都具有姓名name、年龄age、性别sex和小时工资额pay_per_hour等属性;周薪计算成员函数voidCompute_pay(doublehours),(其中参数hours为每周的实际工作时数)和用于显示工人的基本信息的标准输出运算符友元函数ostream&operator(ostream&out,Worker&worker)。工人的薪金等级以小时工资额划分:计时工人的薪金等级分为10、20和40US$/hour三个等级;计薪工人的薪金等级,分为30和50US$/hour两个等级。不同类别和等级工人的周薪计算方法不同,计时工人周薪的计算方法是:如果每周的工作时数(hours)在40以内,则周薪=小时工资额×实际工作时数;如果每周的工作时数(hours)超过40,则周薪=小时工资额×40+1.5×小时工资额×(实际工作时数–40)。而计薪工周薪的计算方法是:如果每周的实际工作时数不少于35小时,则按40小时计周薪(允许有半个工作日的事/病假),超出40小时部分不计薪,即周薪=小时工资额×40;如果每周的实际工作时数少于35小时(不含35小时),则周薪=小时工资额实际工作时数+0.5×小时工资额×(35-实际工作时数)。要求:1.定义Worker、HourlyWorker和SalariedWorker类,并实现它们的不同周薪计算方法。2.在主函数main()中使用HourlyWorker和SalariedWorker类完成如下操作:①通过控制台输入、输出操作顺序完成对5个不同工人的基本信息(姓名、年龄、性别、类别和薪金等级)的注册。注意,5个工人应分属于两类工人的5个等级。②通过一个菜单结构实现在5个工人中可以任意选择一个工人,显示该工人的基本信息,根据每周的实际工作时数(通过控制台输入)计算并显示该工人的周薪。直至选择退出操作。提示:1.可以定义一个Worker类的指针数组Worker*workers[5];用于指向5个动态创建的HourlyWorker或SalariedWorker类对象。注意,程序结束前,应撤消这些动态创建的对象。2.可以为Worker类增加一个成员函数voidName();用于在菜单结构中显示每个工人的姓名作为用户选择的菜单项。难度等级:简单2、定义一个能描述多种几何图形的类派生层次结构:其中基类Shape是一个只描述了几何图形共同概念属性和操作接口的抽象类,而不描述任何针对具体几何图形相关的属性和操作接口。该类的定义如下:enumShapeType{Circle,Ellipse,Rectangle,Triangle,Polygon,HouseShape,Ring};classShape{Protected:ShapeTypetype;//几何图形类型public:Shape(ShapeTypetype);~Shape();virtualdoublePerimeter()=0;//计算几何图形的周长virtualdoubleArea()=0;//计算几何图形的面积};由基类Shape派生的圆类Circle、椭圆类Ellipse、矩形类Rectangle、三角形类Triangle、正多边形Polygon、屋形类HouseShape和环形类Ring都在Shape基础上增加了各自相应的形态属性:Circle类增加了半径属性doubleradius;Ellipse类增加了长轴属性doublelong_axis;和短轴属性doubleshort_axis;Rectangle类增加了长属性doublelength;和宽属性doublewidth;Triangle类增加了底属性doublebottom;和高属性doubleheight;Polygon类增加了边数属性doublenum;和边长属性doublelength;例如正六边形:HouseShape类增加了屋基属性Rectanglebase;和屋顶属性Triangleroof;Ring类增加了内圆属性Circleinside;和外圆属性Circleoutside;并依据各自的形态属性重新定义统一的接口操作Perimeter和Area。同时为了使各个几何图形对象的输入和输出标准化,每个派生图形类还要重载输入运算符operator和输出运算符operator,实现相应图形类对象的形态参数和输出显示图形类对象的基本信息。要求:1.按照题意定义和实现Shape、Circle、Ellipse、Rectangle、Triangle、Polygon、HouseShape和Ring构成的几何图形类结构。2.在主函数main()中编写一个用于测试所定义的几何图形类结构中各个类功能的多态性的菜单选择结构,直至选择退出测试,结束程序执行。在菜单选择结构中对选中的几何图形类进行测试的内容和步骤如下:①动态创建选中的几何图形类对象;②为所创建的几何图形输入形态参数;③显示所创建图形的基本信息;④计算并显示所创建图形的周长和面积;⑤上述操作结束后删除动态创建的几何图形类对象。3.要求编写编程文档,文档内容包括:①绘制基类Shape和派生类Circle、Ellipse、Rectangle、Triangle、Polygon、HouseShape、Ring的类图,以及它们之间的静态关联图。②各个派生几何图形类的定义描述。③main()的流程图。提示:1.如果椭圆的长轴=2a,短轴=2b,则椭圆的周长≈π[1.5(a+b)-√ab],椭圆的面积=πab。如果正n边形的边长=a,则正n边形的面积=ah,其中h=,而α=。2.屋形类HouseShape是由矩形类Rectangle和三角形类Triangle聚合而成,所以HouseShape的接口操作应借助Rectangle和Triangle的接口操作来实现。同样,环形类Ring是由圆形类Circle聚合而成,所以Ring的接口操作也应借助Circle的接口操作来实现。