实验六答案

更新时间:2023-10-10 23:31:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

实验六答案

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=\ 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(em.name[i]) { name[i]=em.name[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)

{ workHours=hours; }

float technician::pay() { salary=workHours*payperhour; return salary; }

class salesman : public employee {

public: salesman(char*,int,float); void setmonthlysales(int num) { monthlysales=num;} int getmonthlysales() { return monthlysales;} float pay(); private: float monthlysales; static float percent; //销售人员的销售提成 };

float salesman::percent=0.5; //假设销售人员的销售提成为50% salesman::salesman(char *name,int n,float sn) :employee(name,n) { monthlysales=sn; }

float salesman::pay() { salary=monthlysales*percent; return salary; }

float CalculateSalary(employee *emptr) { float salary=emptr->pay(); return salary; }

void main() { worker w1(\张三\ technician t1(\李四\ salesman s1(\王五\

}

cout<<\工人\的月薪为\元\\n\cout<<\科研人员\的月薪为\元\\n\cout<<\销售人员\的月薪为\元\\n\

本文来源:https://www.bwwdw.com/article/xrsf.html

Top