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

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 ELGamal和paillier计算效率谁快?
  • ¥15 file converter 转换格式失败 报错 Error marking filters as finished,如何解决?
  • ¥15 ubuntu系统下挂载磁盘上执行./提示权限不够
  • ¥15 Arcgis相交分析无法绘制一个或多个图形
  • ¥15 关于#r语言#的问题:差异分析前数据准备,报错Error in data[, sampleName1] : subscript out of bounds请问怎么解决呀以下是全部代码:
  • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
  • ¥30 3天&7天&&15天&销量如何统计同一行
  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码