北京电子科技学院(BESTI)
实
课程: 面向对象程序设计
验
班级:
1022
报
姓名:
告
徐骏
学号:
102225
成绩:
D14
指导教师:
徐日 选修
实验日期:
2011.12.3
12:00~17:30
实验密级: 预习程度: 实验时间:
仪器组次: 实验名称:
必修/选修: 实验序号:
动态多态
实验目的与要求:
1. 使学生掌握掌握C++语言动态多态的基础编程;
2. 培养学生具有运用C++语言编程解决实际问题的能力,提高学生的计算机编程能力。 3. 引导和培养学生具有认真严谨的实验态度和用于实践的学习精神。
实验仪器: 名称 微机 型号 DELL Optiplex-755 数量 1
- 1 -
实验内容:
1. 类Emp、Manager、Seller、Piecer和Hourer 知识提示:
以虚函数为基础,实现用基类指针调用类结构中不同对象的成员函数。 题目:
编写一个工资管理程序,以雇员类为基类公有派生出经理类、
计件工类和小时工类。经理享有固定的底薪和业绩奖励;销售员的收入是一小部分的基本工资加上销售额的提成;计件工的收入完全取决于其生产的工件数量;小时工的收入以小时计算,再加上按时计算的加班费。运用基类指针显示输出各类对象的薪水值。
具体描述:
雇员类Emp作为基类,有数据成员salary(double型)表示薪水,成员函数set()为成员salary赋值(参数值为600),成员函数count()为salary赋值,成员函数get()获取成员salary的值,成员函数show()用于显示输出成员salary的值。
经理类Manager,新增成员函数count(),用于计算经理的薪水并对salary赋值,底薪8000,业绩奖励数额由用户输入(参考值为12000);新增成员函数show()用于显示成员salary的值。
计件工类Piecer,新增成员函数count(),用于计算计件工的薪水并对salary赋值,计件系数为40,生产产品件数由用户输入(参考值为80),新增成员函数show()用于显示输出成员salary的值。
小时工类Hourer,新增成员函数count(),用于计算小时工的薪
- 2 -
水并对salary赋值,150小时内的计时系数为10,150小时外的加班计时系数为20,工作时数由用户输入(参考值为170),新增成员函数show()用于显示输出成员salary的值。 要求:
1. 所有类定义时,数据成员为private属性,成员函数为public属性,各成员函数的参数请按需要自行设定。
2. 所有类都要求编写构造函数和析构函数,构造函数都为有参函数且具有默认参数值,构造函数完成数据成员的初始化。
3. 所有函数都要有明确的执行信息输出,例如类Emp的构造函数中应明确输出“执行类Emp的构造函数”。
4. 编写主函数main(),在其中编写程序,定义各类的对象,用基类指针指向它们分别操作,对各类对象的成员salary执行count()计算并赋值、执行show()对各类对象的成员salary的值输出显示。 5. 为便于理解题意,程序执行结果可参考下图。
编程设计思想:
因为基类有count()函数,而每一个派生类里面也有新增的count()函数,当基类的成员函数定义为虚函数后,当用基类指针指向这些派生类对象时,系统就会自动用派生类中的同名函数来代替基类中的虚函数。
程序源代码:
#include
- 3 -
class Emp//定义基类Emp { private:
double salary; public:
void set(double n)//执行类EMP的set函数 {
salary=n;
cout<<\执行类EMP的set函数,薪水赋值为<\ }
virtual void count(double n)//执行类EMP的count()函数 {
cout<<\执行类EMP的count()函数\ salary=n; }
double get()//执行类EMP的get()函数 {
cout<<\执行类EMP的get()函数,返回薪水值<\ return salary; }
virtual void show()//执行类EMP的show()函数 {
- 4 -
cout<<\执行类EMP的show()函数,输出薪水:\ }
Emp(double i=0)//执行类EMP的构造函数 {
cout<<\执行类EMP的构造函数\ salary=i; }
~Emp()//执行类EMP的析构函数 {
cout<<\执行类EMP的析构函数\ } };
class Manager:public Emp//定义Emp的派生类Manager { public:
void count(double n)//执行类Manager的count()函数 {
double i=n;
cout<<\执行类Manager的count()函数,经理业绩奖励额:\ Emp::set(n+8000); }
void show()//执行类Manager的show()函数
- 5 -