C# · 12月 20, 2021

c++语言基础—多态—创建雇员信息类

题目:

创建一个表示雇员信息的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

#include

using namespace std;

//以下是雇员类的实现

class employee

{

protected:

string name;

int empNo;

float salary;

public:

employee()

{

name=”noname”;empNo=0;salary=0.0;

}

employee(string name,int empNo,float salary)

{

this->name=name;

this->empNo=empNo;

this->salary=salary;

}

~employee(){}

virtual float pay(){return 0.0;}

};

class worker:public employee

{

protected:

int productNum;

public:

worker(string name,float salary,int productNum):employee(name,empNo,salary)

{

this->productNum=productNum;

}

~worker(){}

float pay()

{

return salary+productNum*80*0.2;

}

};

class technician:public employee

{

protected:

int workHours;

public:

technician(string name,int workHours):employee(name,salary)

{

this->workHours=workHours;

}

~technician(){}

float pay()

{

return salary+workHours*200;

}

};

class salesman:public employee

{

protected:

float monthlysales;

public:

salesman(string name,float monthlysales):employee(name,salary)

{

this->monthlysales=monthlysales;

}

~salesman(){}

float pay()

{

return salary+monthlysales*1.8;

}

};

float CalculateSalary(employee *emptr)

{

return emptr->pay();

}

void main()

{

employee *emp1=new worker(“s1”,001,1000.0,180);

employee *emp2=new technician(“s2”,002,35);

employee *emp3=new salesman(“s3”,003,2400);

cout<<"工人的月薪为"<<CalculateSalary(emp1)<<endl;

cout<<"科研人员的月薪为"<<CalculateSalary(emp2)<<endl;

cout<<"销售人员的月薪为"<<CalculateSalary(emp3)<<endl;

}