本科学生实验报告C++课程设计姓名杨先刚学号0104028专业软件工程班级105实验项目类和类的继承实验类别基础实验指导教师严军勇开课学期2011至2012学年第一学期一、实验设计方案实验名称:类和类的继承实验时间:2011-9-13——2011-9-14实验场地:H123软件环境:VC6.0/WindowsXP1、实验内容与目的(简单介绍实验内容,说明实验目的)实验目的:1)掌握类的继承和虚拟继承;2)掌握函数重载和常用运算符的重载实验内容:1)你的题目2)你的题目1.定义Staff(员工)类,定义Staff(员工)类,由Staff分别派生出Saleman(销售员)类和Manager(经理)类,再由Saleman(销售员)类和Manager(经理)类采用多重继承方式派生出新类SaleManager(销售经理)类。要求:(6)①在Staff类中包含的数据成员有编号(num)、姓名(name)、出勤率(rateOfAttend)、基本工资(basicSal)和奖金(prize)。在Saleman类中还包含数据成员销售员提成比例(deductRate)和个人销售额(personAmount),在Manager类中还包含数据成员经理提成比例(totalDeductRate)和总销售额(totalAmount)。在SaleManager类中不包含其他数据成员。②各类人员的实发工资公式如下:员工实发工资=基本工资+奖金*出勤率销售员实发工资=基本工资+奖金*出勤率+个人销售额*销售员提成比例经理实发工资=基本工资+奖金*出勤率+总销售额*经理提成比例销售经理实发工资=基本工资+奖金*出勤率+总销售额*经理提成比例+个人销售额*销售员提成比例③每个类都有构造函数、输出基本信息函数(Output)和输出实发工资函数(OutputWage)。你的题目2.(5)设计一个时间类Time,要求如下。1.包含时(hour)、分(minute)、秒(second)私有数据成员。2.包含构造函数,重载关于一时间加上另一时间的加法运算符(+)、重载关于一时间减去另一时间的减加运算符(-)、重载输出运算符()与输入运算符()等。——————————————————————————————————————2、实验准备工作(阐述解决问题所涉及的知识内容或算法思想等,若是算法思想,则至少要画一个算法流程图来说明)1.对于实验1是先从课本上的实验题依次先看过来的,有利于回忆以前学过的关于继承的知识,virtual的应用作用。2.实验2也基本上是先借助课本实验题慢慢做过来,对了重载函数的定义与其使用,还有运算符的重载的知识——————————————————————————————————————二、实验步骤、测试与结果分析1、源程序的设计(在此附上源程序清单)#includeiostream#includestringusingnamespacestd;classStaff//定义员工类{protected:stringnum;stringname;floatrateofattend;floatbasicsal;floatprize;public:Staff(stringnu,stringna,floatrate,floatbasic,floatpri){num=nu;name=na;rateofattend=rate;basicsal=basic;prize=pri;}//构造函数voidoutput()//员工基本信息输出函数{cout编号:numendl;cout姓名:nameendl;cout出勤率:rateofattendendl;cout基本工资:basicsalendl;cout奖金:prizeendl;}voidoutputwage(){cout员工实发工资:basicsal+prize*rateofattendendl;coutendl;}};//员工实发工资输出函数classsaleman:virtualpublicStaff//销售人员公有继承{protected:floatdeductrate;floatpersonamount;public:saleman(stringnu,stringna,floatrate,floatbasic,floatpri,floatde,floatpe):Staff(nu,na,rate,basic,pri){deductrate=de;personamount=pe;}voidoutput(){Staff::output();cout销售员提成比例:deductrateendl;cout个人销售额:personamountendl;};voidoutputwage(){Cout”销售员实发工资:basicsal+prize*rateofattend+deductrate*personamountendl;coutendl;}};classmanager:virtualpublicStaff{protected:floattotaldeductrate;floattotalpersonamount;public:manager(stringnu,stringna,floatrate,floatbasic,floatpri,floattotalde,floattotalpe):Staff(nu,na,rate,basic,pri){totaldeductrate=totalde;totalpersonamount=totalpe;}voidoutput(){Staff::output();cout经理提成比例:totaldeductrateendl;cout经理总销售额:totalpersonamountendl;};voidoutputwage(){cout经理实发工资:basicsal+prize*rateofattend+totaldeductrate*totalpersonamountendl;coutendl;}};classsalemanager:publicsaleman,publicmanager{public:salemanager(stringnu,stringna,floatrate,floatbasic,floatpri,floatde,floatpe,floattotalde,floattotalpe):Staff(nu,na,rate,basic,pri),saleman(nu,na,rate,basic,pri,de,pe),manager(nu,na,rate,basic,pri,totalde,totalpe){}voidoutput(){Staff::output();cout销售员提成比例:deductrateendl;cout个人销售额:personamountendl;cout经理提成比例:totaldeductrateendl;cout经理总销售额:totalpersonamountendl;}voidoutputwage(){cout销售总经理实发工资:basicsal+prize*rateofattend+deductrate*personamount+totaldeductrate*totalpersonamountendl;coutendl;}};intmain(){intn;for(inti=0;i3;i++){cout注意!销售员工信息按1,经理请按2,经理销售按3!请输入数字:;cinn;{if(n==2){managerC(0104027,黄坚坚,0.95,14000,2800,0.40,40000);C.output();C.outputwage();}if(n==1){salemanB(0104029,陈庭,0.80,12000.0,3000.0,0.20,10000.0);B.output();B.outputwage();}if(n==3){salemanagerA(0104028,”杨先刚,0.90,20000.0,3600.0,0.44,30000.0,0.25,20000.0);A.output();A.outputwage();}}}return0;}实验2源代码#includeiostream.hclassTime//定义时间类{private:inthour;intminute;intsecond;public:Time(inth=0,intm=0,ints=0):hour(h),minute(m),second(s){}//构造带有参数的构造函数friendistream&operator(istream&,Time&t);//重载输入运算符友元函数friendostream&operator(ostream&,Time&t);//重载输出运算符友元函数Timeoperator+(Time&t1);//重载时间加函数Timeoperator-(Time&t1);//重载时间减函数};TimeTime::operator+(Time&t1)//{TimeT;inttotal;total=hour*3600+minute*60+second+t1.hour*3600+t1.minute*60+t1.second;//把标准时间的时分秒全部化为时分秒T.second=total-total/60*60;T.minute=total/60-total/60/60*60;total/360024?T.hour=total/3600-24:T.hour=total/3600;//total/36024是用于判断是否过了24小时,如果过了就要减掉24returnT;}TimeTime::operator-(Time&t1)//{TimeT;inttotal;total=hour*3600+minute*60+second-(t1.hour*3600+t1.minute*60+t1.second);if(total0)total=-total;//因为两时间相减可能会使秒数为负数,所以total=-total目的就是当出现负数时,把它变成正数T.hour=total/3600;T.minute=(total-T.hour*3600)/60;T.second=total%60;returnT;}istream&operator(istream&input,Time&t)//{cout请输入时间,分,秒:;inputt.hourt.minutet.second;returninput;}ostream&operator(ostream&output,Time&t)//{outputt.hour':'t.minute':'t.secondendl;returnoutput;}intmain(){Timet1,t2,t3,t4;//定义四个对象cint1t2;coutendl;cout第一次输入的时间:t1endl;//输出第一次输入的时间cout第二次输入的时间:t2endl;//输出第二次输入的时间t3=t1+t2;t4=t1-t2;cout两时间之和:t3endl;//两时间之和cout两时间之差:t4endl;//两时间之差return0;}——————————————————————————————————————2、实验现象及结论(应用文字和程序运行的截图说明程序测试现象,并解释结果)运行开始时会跳出一段说明操作性文字,注意按照操作就可以查询你需要找的信息了实验