您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 市场营销 > 实验三-多态性实验报告
浙江理工大学信息学院实验指导书实验名称:类的多态性的实现学时安排:3实验类别:设计性实验实验要求:1人1组学号:姓名: ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄一、实验目的1.理解重载运算符的意义。2.掌握使用成员函数、友员函数重载运算符的特点。3.掌握重载运算符函数的调用方法。4.掌握动态联编的概念。5.掌握虚函数和纯虚函数的使用方法。二、实验原理介绍设计性实验具体原理请见实验内容和步骤实现对抽象类的继承,通过operator函数调用的形式,实现运算符的重载三、实验设备介绍软件需求:windows或linux下的c++编译器硬件需求:对于硬件方面的要求,建议配置是PentiumIII450以上的CPU处理器,64MB以上的内存,200MB的自由硬盘空间、CD-ROM驱动器、能支持24位真彩色的显示卡、彩色显示器、打印机。四、实验内容某公司的员工有经理Manager、技术人员Technicist和营销人员SalsePerson,他们的薪金计算方法如下:经理按月计酬,方法是:基本工资+奖金;技术人员按月计酬,方法是:基本工资;营销人员按月计酬,方法是:基本工资+销售利润*5%。每类人员都有职工编号、姓名、性别、入职时间、职位、基本工资等数据;各类人员使用统一接口get_pay()计算各类人员的月薪,重载运算符实现员工信息的输出。其次,设计一个统计并输出该公司员工当月薪金情况的报表类Report,该类提供insert接口向Report类的容器中添加员工信息,并提供print接口用于展示以职位为单位的每个员工的职工编号、姓名、性别、入职时间以及当月该员工的薪酬,并统计出该职位员工薪酬的最高值和最低值。为了提供更方便的查找功能,请为Report类重载[]运算符,下标值为职位,能根据职位信息查找出所有符合该职位的员工。在主函数中对实现的类进行测试,首先,创建各类人员对象,通过Report类的insert接口向报表中添加这些人员信息,然后通过Report类的print接口输出当月员工薪酬情况报表。存储员工对象的容器请选用合适的STL容器。五程序清单//main.cpp#includeclass.h#includemapintmain(){cout请输入指定月份endl;intmonth;cinmonth;Reportre;re.insert(newTechnicist(0001,王华,男,CDate(2,4,2011),技术,9000));re.insert(newTechnicist(0002,李明,女,CDate(4,10,2009),技术,10000));mapint,intbonus;bonus[1]=1000;bonus[2]=2000;bonus[3]=3000;re.insert(newManager(0003,朱黎明,男,CDate(11,8,2001),经理,12000,bonus));bonus[1]=500;bonus[2]=1500;bonus[3]=2000;re.insert(newManager(0004,刘改云,男,CDate(8,7,2003),经理,10000,bonus));mapint,intsales;sales[1]=200000;sales[2]=100000;sales[3]=500000;re.insert(newSalesPerson(0005,李志武,男,CDate(10,11,2007),销售,5000,sales));re.print(month);return0;}//class.h#ifndefCLASS_H_INCLUDED#defineCLASS_H_INCLUDED#includewindows.h#includeiostream#includestring#includelist#includevector#includemap#includedate.husingnamespacestd;classEmployee{protected:stringname;stringID;stringsex;stringjob;CDatedate;doublebasicmoney;public:Employee(stringID,stringname,stringsex,CDatedate,stringjob,doublebasicmoney);stringgetjob(){returnjob;}stringgetname(){returnname;}stringgetID(){returnID;}stringgetsex(){returnsex;}doublegetbasicmoney(){returnbasicmoney;}CDategetdate(){returndate;}virtualdoublegetpay(intm)=0;};classReport{private:listEmployee*members;listEmployee*operator[](stringjob);doublemin_pay(listEmployee*emp_list,intmonth);doublemax_pay(listEmployee*emp_list,intmonth);voidprint(listEmployee*emp_list,intmonth);public:~Report();voidinsert(Employee*p);voidprint(intn);};classManager:publicEmployee{private:mapint,intprice;public:Manager(stringID,stringname,stringsex,CDatedate,stringjob,doublebasicmoney,mapint,intprice):Employee(ID,name,sex,date,job,basicmoney){this-price=price;}doublegetpay(intm);};classTechnicist:publicEmployee{public:Technicist(stringID,stringname,stringsex,CDatedate,stringjob,doublebasicmoney):Employee(ID,name,sex,date,job,basicmoney){}doublegetpay(intm);};classSalesPerson:publicEmployee{private:mapint,intsales;public:SalesPerson(stringID,stringname,stringsex,CDatedate,stringjob,doublebasicmoney,mapint,intsales):Employee(ID,name,sex,date,job,basicmoney){this-sales=sales;}doublegetpay(intm);};#endif//fuctions.cpp#includeclass.h#includeiostream#includealgorithmusingnamespacestd;Employee::Employee(stringID,stringname,stringsex,CDatedate,stringjob,doublebasicmoney){this-ID=ID;this-name=name;this-sex=sex;this-date=date;this-basicmoney=basicmoney;this-job=job;}doubleManager::getpay(intm){returnprice[m]+basicmoney;}listEmployee*Report::operator[](stringjob){listEmployee*cp;listEmployee*::iteratorit;for(it=members.begin();it!=members.end();it++){if((*it)-getjob()==job)cp.push_back(*it);}returncp;}voidReport::print(intmonth){cout第month月职工收入报表endl;cout------------------------------------------------------endl;cout职位:经理endl;cout工号\t姓名\t性别\t入职时间\t基本工资\t薪酬endl;listEmployee*emp_ls;emp_ls=(*this)[经理];print(emp_ls,month);cout最低薪酬:min_pay(emp_ls,month)endl;cout最高薪酬:max_pay(emp_ls,month)endl;cout------------------------------------------------------endl;cout职位:销售endl;cout工号\t姓名\t性别\t入职时间\t基本工资\t薪酬endl;emp_ls=(*this)[销售];print(emp_ls,month);cout最低薪酬:min_pay(emp_ls,month)endl;cout最高薪酬:max_pay(emp_ls,month)endl;cout------------------------------------------------------endl;cout职位:技术endl;cout工号\t姓名\t性别\t入职时间\t基本工资\t薪酬endl;emp_ls=(*this)[技术];print(emp_ls,month);cout最低薪酬:min_pay(emp_ls,month)endl;cout最高薪酬:max_pay(emp_ls,month)endl;}doubleReport::min_pay(listEmployee*emp_list,intmonth){vectordoublepay;listEmployee*::iteratorit;for(it=emp_list.begin();it!=emp_list.end();it++){pay.push_back((*it)-getpay(month));}return*min_element(pay.begin(),pay.end());}doubleReport::max_pay(listEmployee*emp_list,intmonth){vectordoublepay;listEmployee*::iteratorit;for(it=emp_list.begin();it!=emp_list.end();it++){pay.push_back((*it)-getpay(month));}return*max_element(pay.begin(),pay.end());}voidReport::print(listEmployee*emp_list,intmonth){listEmployee*::iteratorit;for(it=emp_list.begin();it!=emp_list.end();it++){cout(*it)-getID()\t(*i
本文标题:实验三-多态性实验报告
链接地址:https://www.777doc.com/doc-4987921 .html