实验六答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验六答案
1、创建一个表示雇员信息的employee类,其中包含数据成员name、empNo和salary,分
别表示雇员的姓名、编号和月薪。再从employee类派生出3个类worker、technician 和salesman,分别代表普通工人、科研人员、销售人员。三个类中分别包含数据成员productNum、workHours和monthlysales,分别代表工人每月生产产品的数量、科研人员每月工作的时数和销售人员每月的销售额。要求在employee类中声明虚成员函数pay,并在各个派生类中覆盖pay函数,用来计算雇员的月薪,并假定:
普通工人的月薪=每月生产的产品数×每件产品的赢利×20%
科研人员的月薪=每月的工作时数×每小时工作的酬金
销售人员的月薪=月销售额×销售额提成。
创建一个通用函数CalculateSalary,用来计算并返回各种不同类型雇员的月薪。函数CalculateSalary的原型如下:
float CalculateSalary(employee *emptr) ;
在main函数中分别声明worker类、technician类和salesman类的对象代表各种类型的雇员,并调用函数CalculateSalary计算他们的月薪。
解:程序代码如下:
#include
using namespace std;
class employee
{
protected:
char name[20];
int empNo;
float salary;
public:
employee(char *cp="",int no=1001);
employee(employee&);
void setname(char *cp);
void setempNo(int no);
void setsalary(float sa);
char*getname();
int getempNo();
float getsalary();
virtual float pay(){ return 0;}
};
employee::employee(char *cp,int no)
{
int i=0;
while(*cp)
{
name[i]=*cp;
i++;
cp++;
}
name[i]='\0';
empNo=no;
}
employee::employee(employee &em) {
int i=0;
while([i])
{
name[i]=[i];
i++;
}
name[i]='\0';
empNo=em.empNo;
salary=em.salary;
}
void employee::setname(char *cp) {
int i=0;
while(*cp)
{
name[i]=*cp;
i++;
cp++;
}
name[i]='\0';
}
void employee::setempNo(int no) {
empNo=no;
}
void employee::setsalary(float sa) {
salary=sa;
}
char*employee::getname()
{
return name;
}
int employee::getempNo()
{
return empNo;
}
float employee::getsalary()
return salary;
}
class worker : public employee
{
public:
worker(char*,int,int);
void setproductNum(int n)
{ productNum=n;}
int getproductNum()
{ return productNum;}
float pay();
private:
int productNum;
static float proper; //每件产品的利润
};
float worker::proper=20; //假设每件产品的利润为20元worker::worker(char *name,int no,int pronum)
:employee(name,no)
{
productNum=pronum;
}
float worker::pay()
{
salary=productNum*proper*0.2;
return salary;
}
class technician : public employee
{
public:
technician(char*,int,float);
void sethours(float h)
{ workHours=h;}
float gethours()
{ return workHours;}
float pay();
private:
float workHours;
static float payperhour; //科研人员每小时工作的酬金
};
float technician::payperhour=40; //假设科研人员每小时工作的酬金为40元technician::technician(char *name,int no,float hours)
:employee(name,no)