老师布置的作业,加上拓展1的代码之后就运行不了了,求大佬帮忙解答一下~谢谢!
试建立一个类Worker用于描述职工,具体要求如下:
(1)私有数据成员
unsigned int id: 职工号。
char name[11]:姓名
float salary: 工资。(有一符号常量为工资最低值,设为2000)
int level: 技术等级(1~20级),1级为最低,每个等级差别200元
(2)公有成员函数
Worker ( ):构造函数,初始化数据成员为默认值(自动生成职工号,姓名为空,工资默认最低)。
Worker (…):构造函数(自己定义参数),用参数初始化数据成员。参数有各个数据成员。
void setName(...): 设置职工姓名
void infoList( ): 输出职工的各项信息。
void setLevel(...): 修改技术等级level的值。每增加一个等级工资增加200元。
(3)static变量total计算工资总数和函数Average()计算平均工资。
(4)设置友元函数void setReward(Worker &a,float reward),给工人a发奖金。
(5)在主程序中定义N(=5)个Worker对象作为测试数据,完成对Worker类和程序的测试。
(6)在主程序中对其中某个工人发放奖金500元。
扩展1:在类Worker的基础上派生两个类:PieceWorker和HourWorker
在PieceWorker中添加变量piece(整数),假设每个piece的报酬20元,并根据piece计算salary.
在HourWorker中添加变量hour(浮点数),假设每个hour的报酬50元,并根据hour计算salary.
在main()中分别声明不同的对象,假设有一群工人(Worker),N=5,计算他们salary总和。
扩展2:设置GetSalary()函数,将Worker类中GetSalary()设成纯虚函数,并由派生类继承。
按要求完成main()函数的设计,其运行过程如下。
(1) 首先建立N个元素(N=5)的对象指针数组WorkerArray[];
(2) 输入每个Worker的姓名;然后询问是PieceWorker还是HourWorker。
(3) 用多态性计算所有Worker的Salary之和(调用GetSalary()函数)。
#include
#define baseSalary 2000
using namespace std;
class Worker
{
public:
Worker();
Worker(char s[11],int l);
~Worker();
void setName(char name[11]);
void infoList();
void setLevel(int l);
void sum();
static float Aver();
friend void setReward(Worker *pWorker, float reward);
protected:
char name[11];
float salary;
int level;
static unsigned int i;
static float total;
private:
unsigned int id;
};
class PieceWorker:public Worker
{
public:
PieceWorker()
{
}
void Getsalary();
~PieceWorker()
{
}
private:
int piece;
};
class HourWorker:public Worker
{
public:
HourWorker()
{
}
void Getsalary();
~HourWorker()
{
}
private:
float hour;
};
#include
#include
#include"worker.h"
using namespace std;
unsigned int Worker::i = 0;
float Worker::total = 0;
Worker::Worker()
{
strcpy(name," ");
}
Worker::Worker(char s[11],int l)
{
i++;
id = i;
strcpy(name,s);
salary = baseSalary + level*200;
level = l;
}
Worker::~Worker()
{
}
void Worker::setName(char s[11])
{
strcpy(name,s);
}
void Worker::setLevel(int l)
{
level=l;
salary = baseSalary+(200*level);
}
void Worker::sum()
{
total += salary;
}
float Worker::Aver()
{
return total/i;
}
void Worker::infoList()
{
cout<<"工号:"<<id<<'\t'<<"姓名:"<<name<<'\t'<<"技术等级:"<<level<<'\t'<<"工资:"<<salary<<endl;
}
void PieceWorker::Getsalary()
{
Worker::salary = 20*piece + Worker::salary;
Worker::infoList();
}
void HourWorker::Getsalary()
{
Worker::salary = 50*hour + Worker::salary;
Worker::infoList();
}
#include"worker.h"
#define N 5
using namespace std;
void main()
{
Worker *worker[N];
for(int i(0);i
{
char name[11];
int level;
worker[i] = new Worker;//////////////////
cout
cin>>name;
worker[i]->setName(name);
cout<<"请输入第"<<i+1<<"位职工的技术等级:"<<endl;
cin>>level;
worker[i] = new Worker(name,level);///////////////////
worker[i]->setLevel(level);
}
PieceWorker *piceworker[N];
for(int i(0);i<N;i++)
{
int piece;
cout<<"输入第"<<i+1<<"位职工的块数:"<<endl;
cin>>piece;
piceworker[i]->Getsalary();
worker[i]->infoList();
}
cout<<"average="<<Worker::Aver()<<endl;
HourWorker *hourworker[N];
for(int i(0);i<N;i++)
{
int hour;
cout<<"输入第"<<i+1<<"位职工的工作时间:"<<endl;
cin>>hour;
hourworker[i]->Getsalary();
worker[i]->infoList();
}
cout<<"average="<<Worker::Aver()<<endl;
cout<<"给员工发放奖金,请选择第i个员工(0~"<<N-1<<"):";
int index;
cin>>index;
setReward(worker[index],500);
for(int i = 0;i<N;i++)
{
worker[i]->infoList();
}
for( int i = 0;i<N;i++)
{
if ( worker[i] != NULL )
delete worker[i];
}
}
void setReward(Worker * pWorker,float reward)
{
pWorker->salary += reward;
}