欢迎来到天天文库
浏览记录
ID:20408656
大小:63.00 KB
页数:9页
时间:2018-10-09
《实验8_继承与多态》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、实验08:继承与多态实验学时:6实验类型:验证、设计实验要求:必修一、实验目的1.理解继承的概念,了解面向对象设计中继承和多态的合理性;2.掌握派生类的构造与析构;3.掌握在对象中使用类层次和继承思想进行设计、实现和测试;4.区别运行时的多态性的实现,理解重载与同名覆盖的差异;5.理解虚函数与多态性;6.实现运行时多态性的程序设计。二、实验内容1.DifineaclasscalledPartFileledArrayWMaxthatisaderivedclassoftheclassPartFilledAr
2、ray.TheclassPartFilledArrayWMaxhasoneadditionalmembervariablenamedmax_valuethatholdsthemaximumvaluestoredinthearray.Defineamemberaccessorfunctionnamedget_maxthatreturnsthemaximumvaluestoredinthearray.Redefinethememberfunctionadd_valueanddefinetwoconstruc
3、tors,oneofwhichhasanintargumentforthemaximumnumberofentriesinthearray.Alsodefineacopyconstructor,anoverloadedassignmentoperator,andadestructor.(Arealclasswouldhavemorememberfunctions,butthesewilldoforanexercise.)2.某公司雇员(employee)包括经理(Manager)、技术人员(Techni
4、cian)和销售员(Saleman)。开发部经理(developermanager)既是经理也是技术人员,销售部经理(salesmanager)既是经理也是销售员。以employee类为虚基类,派生出manager、technician和saleman类,再进一步派生出developermanager和salesmanager类。Employee类的属性包括姓名、职工号、工资级别、月薪(实发基本工资加业绩工资);操作包括月薪计算函数pay(),该函数要求输入请假天数,扣除应扣工资后,得出实发基本工资。T
5、echnician类派生的属性有每小时附加酬金和当月工作时数,以及研究完成进度系数,业绩工资为三者之积。也包括同名的pay函数,工资总额为基本工资加业绩工资。Saleman类派生的属性有当月销售额和酬金提取百分比,业绩工资为两者之积。也包括同名的pay函数,工资总额为基本工资加业绩工资。Manager类派生的属性有固定奖金额和业绩系数,业绩工资为两者之积。工资总额也为基本工资加业绩工资。而在developermanager类中,pay函数是将作为经理和作为技术人员业绩工资之和的一半作为业绩工资。在sal
6、esmanager类中,pay函数则是经理的固定奖金额的一半,加上部门总销售额与提成比例之积,这是业绩工资。编程实现工资管理。特别注意pay()的定义和调用方法:先用同名覆盖,再用运行时多态。3.继承范例:定义一个继承与派生关系的类体系,在派生类中访问基类成员。[要求]定义一个点类,包含x,y坐标数据成员,显示函数和计算面积的函数成员;以点为基类派生一个圆类,增加表示半径的数据成员,重载显示和计算面积的函数;定义一个直线类,以两个点类对象作数据成员,定义显示、求面积及长度函数。编程测试所定义的类体系。[
7、程序]#include#include#definePI3.14159classPoint{friendclassLine;protected:doublex,y;public:Point(){x=0;y=0;}Point(doublexv,doubleyv){x=xv;y=yv;}doubleArea(){return0;}voidShow(){cout<<"x="<8、{doubleradius;public:Circle(){x=0;y=0;radius=0;}Circle(doublexv,doubleyv,doublevv):Point(xv,yv){//调用基类构造函数radius=vv;}doubleArea(){returnPI*radius*radius;}voidShow(){//访问基类的数据成员cout<<"x="<
8、{doubleradius;public:Circle(){x=0;y=0;radius=0;}Circle(doublexv,doubleyv,doublevv):Point(xv,yv){//调用基类构造函数radius=vv;}doubleArea(){returnPI*radius*radius;}voidShow(){//访问基类的数据成员cout<<"x="<
此文档下载收益归作者所有