阅读以下说明和C++程序 将应填入(n)处的字句写在答题纸的对应栏内。【说明】设计某IT教育研发中心
阅读以下说明和C++程序,将应填入(n)处的字句写在答题纸的对应栏内。
【说明】
设计某IT教育研发中心的工资管理系统,该中心主要有3类人员:经理、销售员和销售经理。要求存储这些人员的编号、姓名和月工资,计算月工资并显示全部信息。月工资计算办法是:经理拿固定月薪8000元;销售员拿固定工资1000元,然后再按当月销售额的4%提成;销售经理既拿固定月工资也领取销售提成,固定月工资为5000元,销售提成为所管辖部门当月销售总额的5‰。
按要求设计一个基类employee,销售员类salesman,经理类manager,销售经理类salesmanager.
程序5-1是类employee的模块内容,程序5-2是类salesman的类模块内容,程序5-3是类manager的模块内容,程序5-4是类salesmanager的模块内容。在主测试程序中,输入张三所管部门月销售量10000后的输出结果如下:
【程序5-1】
#include
#include
classemployee
{
protected:
intno;
char*name;
floatsalary;
public:
employee(intnum,char*ch)
{no=num;
name=ch;
salary=0;}
virtualvoidpay()=0;
virtualvoiddisplay()
{cout《"编号:"《no《endl;
cout《"本月工资:"《salary《endl;}
};
【程序5-2】
classsalesman:(1)
{
protected:
floatcommrate,sales;
public:
salesman(intnum,char*ch):employee(num,ch)
{commrate=0.04;}
voidpay()
{cout《name《"本月销售额:";
cin》sales;
salary=sales*commrate+1000;}
voiddisplay()
{cout《"销售员:"《name《endl;
employee::display();}
};
【程序5-3】
classmanager:(1)
{
protected:
floatmonthpay;
public:
manager(intnum,char*ch):employee(num,ch)
{monthpay=8000;}
voidpay()
{salary=monthpay;}
voiddisplay()
{cout《"经理:"《name《endl;
employee::display();}
};
【程序5-4】
classsalesmanager:(2)
{
public:
salesmanager(intnum,char*ch):(3)
{monthpay=5000;
commrate=0.005;}
voidpay()
{cout《name《"所管部门月销售量:";
cin》sales;
(4)}
voiddisplay()
{cout《"销售经理:"《name《endl;
(5)}
};
voidmain()//主测试函数
{salesmanagerp1(1001,"张三");
p1.pay();
p1.display();
}
参考解答
答案:
(1)virtualpublicemployee
(2)publicmanager,publicsalesman
(3)employee(num,ch),manager(num,ch),salesman(num,ch)
(4)salary=monthpay+commrate*sales;
(5)employee::display();
解析:
本题考查类的定义、继承及虚基类与虚函数的应用。
首先我们来看一下基类employee的程序代码,在基类中构造了一个构造函数和两个虚函数,其中虚函数display()可以输出编号和工资。
由整个程序的作用可以看出,类salesman与类manager应继承类employee,而类salesmanager则应该继承类salesman与类manager.在每个类中都有函数pay()和display(),且在每个类中都对这两个函数进行了重新定义。这样这两个同名函数出现多个地址映射。要解决这个问题,在C++语言中,采用虚基类。因此,第(1)空的答案是virtualpublicemployee.
第(2)空也是表示类的继承,类salesmanager继承类salesman与类manager,因此,此空答案为publicmanager,publicsalesman.
结合整个程序来看,其他三个类都是类salesmanager的父类,因此,第(3)空处应该填employee(num,ch),manager(num,ch),salesman(num,ch)。
根据题目的要求,再结合主函数与类salesmanager的模块可以推出第(4)空处的功能是计算销售经理的月总工资,而计算方法是固定工资加提成。因此,答案为salary=monthpay+commrate*sales.
对比三个子类的display()函数,不难发现第(5)空应为employee::display()。
相似问题
阅读以下说明和C函数将应填入(n)处的字句写在答题纸的对应栏内【说明1】函数Counter(intn
阅读以下说明和C函数将应填入(n)处的字句写在答题纸的对应栏内【说明1】函数Counter(intn,intw[])的功能是计算整数n的二进制表示形式中的1个数同时用数组
阅读以下说明和C语言程序 将应填入(n)处的字句写在答题纸的对应栏内。【说明】魔方阵 又叫幻方 在我
阅读以下说明和C语言程序,将应填入(n)处的字句写在答题纸的对应栏内。【说明】魔方阵,又叫幻方,在我国古代称为"纵横图" 由1…N2共N2个自然数构成每行
硬盘属于什么存储器?
硬盘属于什么存储器?
在项目风险识别时 一般不用的技术是( )A.因果图B.流程图C.影响图D.帕累托图
在项目风险识别时,一般不用的技术是( )A 因果图B 流程图C 影响图D 帕累托图
在进行项目需求管理时 某需求的状态描述是“该需求已被分析 估计了其对项目余下部分的影响 已用一个明确
在进行项目需求管理时,某需求的状态描述是“该需求已被分析,估计了其对项目余下部分的影响,已用一个明确的产品版本号或创建编号分配到相关的基线中,