lingzaiya 2017-12-04 13:57 采纳率: 0%
浏览 2329

C++中Worker类问题,继承与派生

老师布置的作业,加上拓展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;
}

  • 写回答

1条回答 默认 最新

  • devmiao 2017-12-04 15:50
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 树莓派与pix飞控通信
  • ¥15 自动转发微信群信息到另外一个微信群
  • ¥15 outlook无法配置成功
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题