多态性实验报告_第1页
多态性实验报告_第2页
多态性实验报告_第3页
多态性实验报告_第4页
多态性实验报告_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

浙江理工大学信息学院面对对象程序设计实验报告实验名称:类的多态性的实现 学时安排:3实验类别:设计性实验 实验规定:1人1组学号: 姓名: ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄一、实验目的1.理解重载运算符的意义。2.掌握使用组员函数、友员函数重载运算符的特点。3.掌握重载运算符函数的调用办法。4.掌握动态联编的概念。5.掌握虚函数和纯虚函数的使用办法。二、实验原理介绍设计性实验具体原理请见实验内容和环节实现对抽象类的继承,通过operator函数调用的形式,实现运算符的重载三、实验设备介绍软件需求:Windows或Linux下的C++编译器硬件需求:对于硬件方面的规定,建议配备是PentiumIII450以上的CPU解决器,64MB以上的内存,200MB的自由硬盘空间、CD-ROM驱动器、能支持24位真彩色的显示卡、彩色显示屏、打印机。四、实验内容某公司的员工有经理Manager、技术人员Technicist和营销人员SalesPerson,他们的薪金计算办法以下:经理按月计酬,办法是:基本工资+奖金;技术人员按月计酬,办法是:基本工资;营销人员按月计酬,办法是:基本工资+销售利润*5%。每类人员都有职工编号、姓名、性别、入职时间、职位、基本工资等数据;各类人员使用统一接口get_pay()计算各类人员的月薪,重载<<运算符实现员工信息的输出。另首先,设计一种统计并输出该公司员工当月薪金状况的报表类Report,该类提供insert接口向Report类的容器中添加员工信息,并提供print接口用于展示以职位为单位的每个员工的职工编号、姓名、性别、入职时间以及当月该员工的薪酬,并统计出该职位员工薪酬的最高值和最低值。为了提供更方便的查找功效,请为Report类重载[]运算符,下标值为职位,能根据职位信息查找出全部符合该职位的员工。在主函数中对实现的类进行测试,首先,创立各类人员对象,通过Report类的insert接口向报表中添加这些人员信息,然后通过Report类的print接口输出当月员工薪酬状况报表。五程序清单#include<iostream>#include<vector>#include<string>usingnamespacestd;classDate{public:inty,m,d;Date(intyy=0,intmm=0,intdd=0):y(yy),m(mm),d(dd){}friendistream&operator>>(istream&is,Date&p);friendostream&operator<<(ostream&os,Date&p);};classEmployee{protected:Datedate;stringemployee_number;stringemployee_name;stringemployee_gender;stringemployee_position;doubleemployee_basic_money;doubleprize[13];public:virtualdoublegetpay(intn)=0;Dateget_date(){returndate;}stringget_number(){returnemployee_number;}stringget_name(){returnemployee_name;}stringget_gender(){returnemployee_gender;}stringget_position(){returnemployee_position;}doubleget_basic_money(){returnemployee_basic_money;}virtualvoidput(Dated,stringe_num,stringe_name,stringe_g,stringe_p,doublee_m,doublemoney[13])=0;};classManager:publicEmployee{public:Manager(inta=0,intb=0,intc=0,doubled=-1){Datedate(a,b,c);employee_basic_money=d;for(inti=0;i<13;i++)prize[i]=0;}voidput(Dated,stringe_num,stringe_name,stringe_g,stringe_p,doublee_m,doublemoney[13]);doublegetpay(intn);};classTechnicist:publicEmployee{public:Technicist(intp=-1,inta=0,intb=0,intc=0,intd=-1){Datedate(a,b,c);employee_basic_money=d;}voidput(Dated,stringe_num,stringe_name,stringe_g,stringe_p,doublee_m,doublemoney[13]);doublegetpay(intn);};classSalsePerson:publicEmployee{public:SalsePerson(inta=0,intb=0,intc=0,intd=-1){Datedate(a,b,c);for(inti=0;i<13;i++)prize[i]=0;employee_basic_money=d;}voidput(Dated,stringe_num,stringe_name,stringe_g,stringe_p,doublee_m,doublemoney[13]);doublegetpay(intn);};classRepoter{private:vector<Employee*>v;vector<Employee*>::iteratorit;public:voidadd(Employee*p);voidprint(intn1,intn2);voidprint(intn);voidoperator[](stringpos);};#include"h1.h"istream&operator>>(istream&is,Date&p){is>>p.y>>p.m>>p.d;returnis;}ostream&operator<<ostream&os,Date&p){os<<p.y<<"/"<<p.m<<"/"<<p.d<<endl;returnos;}voidManager::put(Dated,stringe_num,stringe_name,stringe_g,stringe_p,doublee_m,doublemoney[13]){cout<<"M:put"<<endl;date=d;employee_number=e_num;employee_name=e_name;employee_gender=e_g;employee_position=e_p;employee_basic_money=e_m;for(inti=1;i<13;i++)prize[i]=money[i];}doubleManager::getpay(intn){if(employee_basic_money==-1||n>12||n<=0)return-1;returnemployee_basic_money+prize[n];}voidTechnicist::put(Dated,stringe_num,stringe_name,stringe_g,stringe_p,doublee_m,doublemoney[13]){cout<<"T:put"<<endl;date=d;employee_number=e_num;employee_name=e_name;employee_gender=e_g;employee_position=e_p;employee_basic_money=e_m;for(inti=1;i<13;i++)prize[i]=money[i];}doubleTechnicist::getpay(intn){returnemployee_basic_money;}voidSalsePerson::put(Dated,stringe_num,stringe_name,stringe_g,stringe_p,doublee_m,doublemoney[13]){cout<<"S:put"<<endl;date=d;employee_number=e_num;employee_name=e_name;employee_gender=e_g;employee_position=e_p;employee_basic_money=e_m;for(inti=1;i<13;i++)prize[i]=money[i];}doubleSalsePerson::getpay(intn){if(employee_basic_money==-1)return-1;returnemployee_basic_money+prize[n]*0.05;}voidRepoter::add(Employee*p){v.push_back(p);}voidRepoter::print(intn1,intn2){inti=0;for(it=v.begin();it!=v.end();it++,i++){cout<<v[i]->get_number()<<endl;cout<<v[i]->get_name()<<endl;cout<<v[i]->get_gender()<<endl;cout<<v[i]->get_date();cout<<v[i]->get_position()<<endl;doublesum=0;for(intj=n1;j<=n2;j++){sum+=v[i]->getpay(j);}cout<<sum<<endl;}}voidRepoter::print(intn){cout<<v[n]->get_number()<<endl;cout<<v[n]->get_name()<<endl;cout<<v[n]->get_gender()<<endl;cout<<v[n]->get_date();cout<<v[n]->get_position()<<endl;cout<<v[n]->get_basic_money()<<endl;}voidRepoter::operator[](stringpos){inti=0;for(it=v.begin();it!=v.end();it++,i++){if(v[i]->get_position()==pos)print(i);cout<<endl;}}#include"h1.h"intmain(){Datedd;stringnumber;stringname;stringgender;stringposition;doublebasic_money;doublemoney[13];Employee*p;Repoterre;//n为真时表达继续输入

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论