实验六答案

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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)

相关文档
最新文档