内容发布更新时间 : 2024/11/7 12:36:59星期一 下面是文章的全部内容请认真阅读。
浙江理工大学信息学院
面向对象程序设计实验报告
实验名称:类的多态性的实现 学时安排:3 实验类别:设计性实验 实验要求:1人1组 学号: 姓名:
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 一、实验目的
1. 理解重载运算符的意义。
2. 掌握使用成员函数、友员函数重载运算符的特点。 3. 掌握重载运算符函数的调用方法。 4. 掌握动态联编的概念。
5. 掌握虚函数和纯虚函数的使用方法。 二、实验原理介绍 设计性实验
具体原理请见实验内容和步骤
实现对抽象类的继承,通过operator函数调用的形式,实现运算符的重载 三、实验设备介绍
软件需求: Windows或Linux下的C++编译器
硬件需求: 对于硬件方面的要求,建议配置是Pentium III 450以上的CPU处理器,64MB以上的内存,200MB的自由硬盘空间、CD-ROM驱动器、能支持24位真彩色的显示卡、彩色显示器、打印机。 四、实验内容
某公司的员工有经理Manager、技术人员Technicist和营销人员SalesPerson,他们的薪金计算方法如下:
经理按月计酬,方法是:基本工资+奖金;技术人员按月计酬,方法是:基本工资;营销人员按月计酬,方法是:基本工资+销售利润*5%。
每类人员都有职工编号、姓名、性别、入职时间、职位、基本工资等数据;
各类人员使用统一接口get_pay()计算各类人员的月薪,重载<<运算符实现员工信息的输出。其次,设计一个统计并输出该公司员工当月薪金情况的报表类Report,该类提供insert接口向Report类的容器中添加员工信息,并提供print接口用于展示以职位为单位的每个员工的职工编号、姓名、性别、入职时间以及当月该员工的薪酬,并统计出该职位员工薪酬的最高值和最低值。为了提供更方便的查找功能,请为Report类重载[]运算符,下标值为职位,能根据职位信息查找出所有符合该职位的员工。在主函数中对实现的类进行测试,首先,创建各类人员对象,通过Report类的insert接口向报表中添加这些人员信息,然后通过Report类的print接口输出当月员工薪酬情况报表。 五 程序清单 #include
Date(int yy = 0, int mm = 0, int dd = 0) :y(yy), m(mm), d(dd){} friend istream& operator>>(istream &is, Date &p); friend ostream& operator<<(ostream &os, Date &p); };
class Employee{ protected: Date date;
string employee_number; string employee_name; string employee_gender; string employee_position; double employee_basic_money;
double prize[13]; public:
virtual double getpay(int n) = 0; Date get_date(){ return date; }
string get_number(){ return employee_number; } string get_name() { return employee_name; } string get_gender() { return employee_gender; } string get_position() { return employee_position; } double get_basic_money() { return employee_basic_money; }
virtual void put(Date d, string e_num, string e_name, string e_g, string e_p, double e_m,double money[13]) = 0; };
class Manager :public Employee{ public:
Manager(int a = 0, int b = 0, int c = 0, double d = -1){ Date date(a, b, c);
employee_basic_money = d;
for (int i = 0; i < 13; i++) prize[i] = 0; }
void put(Date d, string e_num, string e_name, string e_g, string e_p, double e_m, double money[13]); double getpay(int n); };
class Technicist :public Employee{ public:
Technicist(int p = -1, int a = 0, int b = 0, int c = 0, int d = -1){ Date date(a, b, c);
employee_basic_money = d; }
void put(Date d, string e_num, string e_name, string e_g, string e_p,