c++的一个编程题!急啊····高手帮帮忙哈

定义一个雇员类Employee,包含属性:编号,姓名,性别,级别,月薪。成员函数:分别设置编号,姓名,性别,级别,月薪的函数,以及分别获取编号,姓名,性别,月薪的函数。
以此作为基类派生出兼职技术人员类,兼职销售人员类和经理类。技术人员类新增成员:每小时的报酬和当月工作小时数,其工资为两者的乘积;销售人员类新增成员:每月销售额和提成比例,其工资为两者的乘积;经理新增成员:固定工资,其月薪=固定工资。
再由销售人员和经理类派生出销售经理类,其工资为固定工资+销售提成。
要求①定义并实现以上类,均定义出构造函数;
②Employee声明为虚基类,其设置月薪的函数定义为纯虚函数,设置函数所需实参均由键盘输入。
③主函数中,定义Employee类指针数组,数组元素为各派生类对象,统一处理各派生类对象的成员设置及返回。
④每个类中的成员均给出注释语句。

//employee.h
class employee
{
protected:
char name[20]; //姓名
int individualEmpNo; //个人编号
int grade; //级别
float accumPay; //月薪总额
static int employeeNo; //本公司职员编号目前最大值
public:
employee(); //构造函数
~employee(); //析构函数
virtual void pay()=0; //计算月薪函数(纯虚函数)
virtual void promote(int increment=0); //升级函数(虚函数)
void SetName(char *); //设置姓名函数
char * GetName(); //提取姓名函数
int GetindividualEmpNo(); //提取编号函数
int Getgrade(); //提取级别函数
float GetaccumPay(); //提取月薪函数
};

class technician:public employee //兼职技术人员类
{
private:
float hourlyRate; //每小时酬金
int workHours; //当月工作时数
public:
technician(); //构造函数
void SetworkHours(int wh); //设置工作时数函数
void pay(); //计算月薪函数
void promote(int); //升级函数
};

class salesman:virtual public employee //兼职推销员类
{
protected:
float CommRate; //按销售额提取酬金的百分比
float sales; //当月销售额
public:
salesman(); //构造函数
void Setsales(float sl); //设置销售额函数
void pay(); //计算月薪函数
void promote(int); //升级函数
};

class manager:virtual public employee //经理类
{
protected:
float monthlyPay; //固定月薪数
public:
manager(); //构造函数
void pay(); //计算月薪函数
void promote(int); //升级函数
};

class salesmanager:public manager,public salesman //销售经理类
{
public:
salesmanager(); //构造函数
void pay(); //计算月薪函数
void promote(int); //升级函数
};

//employee.cpp
#include "stdafx.h"
#include<iostream>
#include<cstring>
#include"employee.h"
using namespace std;

int employee::employeeNo=1000; //员工编号基数为1000

employee::employee()
{ individualEmpNo=employeeNo++; //新输入的员工编号为目前最大编号加1
grade=1; //级别初值为1
accumPay=0.0;} //月薪总额初值为0

employee::~employee()
{}

void employee::promote(int increment)
{ grade+=increment; } //升级,提升的级数由increment指定

void employee::SetName(char* names)
{ strcpy(name,names); } //设置姓名

char* employee::GetName()
{ return name;} //提取成员姓名

int employee::GetindividualEmpNo()
{ return individualEmpNo;} //提取成员编号

int employee::Getgrade()
{ return grade;} //提取成员级别

float employee::GetaccumPay()
{ return accumPay;} //提取月薪

technician::technician()
{ hourlyRate=100;} //每小时酬金100元

void technician::SetworkHours(int wh)
{ workHours=wh;} //设置工作时间

void technician::pay()
{ accumPay=hourlyRate*workHours;} //计算月薪,按小时计酬

void technician::promote(int)
{ employee::promote(2); } //调用基类升级函数,升2级

salesman::salesman()
{ CommRate=0.04f;} //销售提成比例4%

void salesman::Setsales(float sl)
{ sales=sl;} //设置销售额

void salesman::pay()
{ accumPay=sales*CommRate;} //月薪=销售提成

void salesman::promote(int)
{ employee::promote(0); } //调用基类升级函数,升0级

manager::manager()
{ monthlyPay=8000;} //固定月薪8000元

void manager::pay()
{ accumPay=monthlyPay;} //月薪总额即固定月薪数

void manager::promote(int )
{ employee::promote(3);} //调用基类升级函数,升3级

salesmanager::salesmanager()
{ monthlyPay=5000;
CommRate=0.005f;}

void salesmanager::pay()
{ accumPay=monthlyPay+CommRate*sales; } //月薪=固定月薪+销售提成

void salesmanager::promote(int)
{ employee::promote(2);} //调用基类升级函数,升2级
温馨提示:答案为网友推荐,仅供参考