首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
计算机
阅读下列程序说明,将应填入(n)处的字句写在答卷纸的对应栏内。 【程序说明】 对于一个公司的雇员来说,无非有3种:普通雇员、管理人员和主管。这些雇员有共同的数据:名字、每小时的工资,也有一些共同的操作:数据成员初始化、读雇员的数据成员及计算雇员
阅读下列程序说明,将应填入(n)处的字句写在答卷纸的对应栏内。 【程序说明】 对于一个公司的雇员来说,无非有3种:普通雇员、管理人员和主管。这些雇员有共同的数据:名字、每小时的工资,也有一些共同的操作:数据成员初始化、读雇员的数据成员及计算雇员
admin
2009-02-15
68
问题
阅读下列程序说明,将应填入(n)处的字句写在答卷纸的对应栏内。
【程序说明】
对于一个公司的雇员来说,无非有3种:普通雇员、管理人员和主管。这些雇员有共同的数据:名字、每小时的工资,也有一些共同的操作:数据成员初始化、读雇员的数据成员及计算雇员的工资。但是,他们也有不同。例如.管理人员除有这些共同的特征外,有可能付固定薪水,主管除有管理人员的共同特征外,还有其他物质奖励等。3种雇员中,管理人员可以看作普通雇员的一种,而主管又可以看作管理人员的一种。我们很容易想到使用类继承来实现这个问题:普通雇员作为基类,管理人员类从普通雇员类中派生,而主管人员类又从管理人员类中派生。
下面的程序1完成上述各个类的定义,并建立了3个雇员(一个普通雇员、一个管理人员和一个主管)的档案,并打印出各自的工资表。将“程序1”中的成员函数定义为内联函数,pay成员函数定义为虚函数,重新完成上述要求。
【程序1】
//普通雇员类
class Employee
{
public:
Employee(char*theName,float thePayRate);
char * getName()const;
float getPayRate()const;
float pay(float hoursWorked)const:
protected:
char*name; //雇员名称
float payRate; //薪水等级
};
Employee::Employee(char * theName,float thePayRate)
{
name=theName;
payRate=thePayRate;
}
char*Employee::getName()const
{
return name;
}
float Employee::getPayRate()const
}
return payRate;
}
float Employee::pay(float hoursWorked)const
{
return hoursWorked * payRate;
}
//管理人员类
Class Manager:public Employee
{
public:
//isSalaried付薪方式:true付薪固定工资,false按小时付薪
Manager(char * theName,float thePayRate,bool isSalaried);
bool getSalaried()const;
float pay(float hoursWorked)const;
protected:
bool Salaried;
};
Manager::Manager(Char*theName,float thePayRate,bool isSalaried)
:Employee(theName,thePayRate)
{
salaried=isSalaried;
}
bool Manager::getSalaried() const
{
return Salaried;
}
float Manager::pay(float hoursWorked)const
{
if(salaried)
return payRate;
/*else*/
return Employee::pay(hoursWorked);
}
//主管人员类
class Supervisor:public Employee
{
public:
Supervisor(Char*theName,float thePayRate,float theBouns):
Employee(theName,thePayRate,(1)),bouns(theBouns){}
float getBouns()const{return bouns;}
float pay(float hoursWorked)const
return (2)
}
protected:
float bouns;
}
#include" iostream.h"
void main()
{
Employee e("Jack",50.00);
Manager m("Tom",8000.00, true);
Supervior s("Tanya",8000.00,8000.00);
cout<<"Name:" <<e.getName()<<endl;
cout<<"Pay:"<<e.pay(80)<<endl; //设每月工作80小时
tout<<"Nabe:" <<m.getName()<<end,;
cout<<"Pay:" <<m.pay(40)<<endl;
cout<<"Nabe:" <<s.getName()<<endl;
cout<<"Pay:"<<s.pay(40)<<endl; //参数40在这里不起作用
}
【程序2】
#include "employee.h"
//普通雇员类
class Employee
{
public:
//构造函数
Employee(String theName,float thePayRate):
name(theNabe),payRate(thePayRate){}
//取雇员姓名
String getNabe() const{returnname;}
//取雇员薪水等级
float getPayRate()const{return payRate;}
//计算雇员薪水
virtual float pay(float hoursWorked)const {return (3);}
protected:
String name; //雇员名称
float payRate; //薪水等级
};
//管理人员类
//继承普通雇员类
class Manager:public Employee
{
public:
//构造函数
//isSalaried标识管理人员类的付薪方式
//true按阶段付薪(固定工资)
//false按小时付薪
Manager(String theName,float thePayRate,bool isSalaned):
Employee(theName,thePayRate),Salaried(isSalarled){}
//取付薪方式
bool getSalarled()const{return salaried;}
//计算薪水
virtual float pay(float (4))const;
protected:
bool Salaried;
};
float Manager::pay(float hoursWorked)const
{
if(salaried) //固定付薪方式
return payRate;
else //按小时付薪
return (5);}
//主管人员类
class Supervisor: (6)
{
public:
//构造函数
Supervisor(String theName,float thePayRate,float theBouns):
Manager(theName,thePayRate,true),bouns(theBouns){}
//取奖金数额
float getBouns()const{return bouns;}
//计算薪水
virtual float pay(float hoursWorked)const
{
retum payRate+bouns;
}
(7)
float bouns;
}
#include "employee.h"
#include"jostream.h" void main()
{
(8)* ep[3];
ep[0]=new Employee("Jack","50.00");
ep[1]=Flew Manager("Tom","8000.00",true);
ep[2]=new Superwor("Tanya","8000.00","8000.00");
for(int i=0;i<3;i++){
cout<<"Name:"<<(9)<<endl;
cout<<"Pay:"<<(10)<<endl; //设每月工作80小时
}
}
选项
答案
(1)true(2)payRate+bouns(3)hoursWorked*payRate (4)hoursWorked (5)hoursWorked*payRate(6)public Manager(7)protected:(8)Employee (9)ep[i]->getName()(10)ep[i]->pay(80)
解析
(1)普通雇员类是所有类的基类,描述了雇员的一些基本信息,管理人员类从普通雇员类中派生,管理人员的付薪方式与普通雇员可能相同,所以该类添加了一个成员变量标识,并覆盖了基类的pay ()函数。主管类从管理人员类中派生,主管人员是管理人员的一种,他们不仅支付固定薪水,而且还有奖金。所以在主管类中添加了bonus成员,保存他们的奖金数额,并覆盖了管理人员类的pay()函数重新计算工资。
(2)程序中建立了3个雇员(一个普通雇员、一个管理人员和一个主管)的档案,并打印出各自的工资表。事实上,将3种雇员分开处理会很繁琐,如果能够把他们看作同一种类型,都看成雇员类(他们本来都是雇员)统一处理,但在计算工资时再调用各自的Pay()函数,那程序会简单得多。这就需要利用多态特性,只要将Pay()函数定义成虚函数,便可以实现了。
转载请注明原文地址:https://kaotiyun.com/show/NMDZ777K
本试题收录于:
软件设计师下午应用技术考试题库软考中级分类
0
软件设计师下午应用技术考试
软考中级
相关试题推荐
以下关于不同类型的软件测试的叙述,正确的是______。A.单元测试不是模块测试B.多个模块不能平行地独立进行测试,应该顺序执行C.系统测试是检验程序单元或部件之间的接口关系D.确认测试是通过检验和/或核查所提供的客观证据,证实软件是否满足特定预期
在操作系统中,虚拟设备通常采用(11)设备来模拟低速设备(如打印机)。
以下关于模块耦合关系的叙述中,耦合程度最低的是__________(39),其耦合类型为___________(40)耦合。(40)
在分布式数据库中有分片透明、复制透明、位置透明和逻辑透明等基本概念,其中:___________(19)是指局部数据模型透明,即用户或应用程序无须知道局部使用的是哪种数据模型;___________(20)是指用户或应用程序不需要知道逻辑上访问的表具体是怎
在分布式数据库中有分片透明、复制透明、位置透明和逻辑透明等基本概念,其中:___________(19)是指局部数据模型透明,即用户或应用程序无须知道局部使用的是哪种数据模型;___________(20)是指用户或应用程序不需要知道逻辑上访问的表具体是怎
某企业的生产流水线上有2名工人P1和P2,1名检验员P3。P1将初步加工的半成品放入半成品箱B1;P2从半成品箱B1取出继续加工,加工好的产品放入成品箱B2;P3从成品箱B2取出产品检验。假设B1可存放n件半成品,B2可存放m件产品,并设置6个信号量S1、
零件关系P(零件名,条形码,供应商,产地,价格)中的(12)属性可以作为该关系的主键。查询产于西安且名称为“P2”的零件,结果以零件名、供应商及零件价格分列表示,对应的SQL语句为:SELECT零件名,供应商,价格FROMPWHE
某软盘有40个磁道,磁头从一个磁道移至另一个磁道需要5ms。文件在磁盘上非连续存放,逻辑上相邻数据块的平均距离为10个磁道,每块的旋转延迟时间及传输时间分别为100ms和25ms,则读取一个100块的文件需要时间为(24)。
对某商店业务处理系统采用数据流图(DFD)进行功能建模,其中“检查订货单”是其中的一个①。由于在进行订货单检查时,需要根据客户的欠款情况、订单金额等多个条件判断是否采取发出催款单、准备货物、发出发货单等行为,此时适合采用②进行描述。①处
软件测试使用各种术语描述软件出现的问题,以下叙述正确的是______。A.软件错误(error)是指在软件生命周期内的不希望或不可接受的人为错误,其结果是导致软件故障的产生B.软件缺陷(defect)是存在于软件(文档、数据、程序)之中的那些不希望或不
随机试题
阅读《日出》中的一段台词,然后回答问题。……你们好狠的心哪!你们给我一个月不过十三块来钱,可是你们左扣右扣的,一个月我实在领下的才十块二毛五。我为着这辛辛苦苦的十块二毛五,我整天地写,整天给你们伏在书桌上写;我抬不起头,喘不出一口气地写;我从早到晚地写;
甲、乙和丙3人共同创办了某合伙企业。后甲因病去世。甲的妻子丁、10岁的儿子戊是甲的继承人。则以下说法正确的是:()
导致渗透性利尿的因素是
A.调畅气机B.宣发卫气C.摄纳清气D.受纳腐熟E.统摄血液肺的生理功能是
可能出现梅格斯综合征的卵巢肿瘤为
北京大学邀请境外一学术代表团来华进行学术交流,通过货运渠道从北京国际机场口岸运进一批讲学必需的设备,其中有一个先进的智能机器人是国内所没有的。货物进口时,北京大学作为收货人委托北京某报关企业在机场海关办理该批设备的进口手续。交流结束后,北京大学同外国代表团
当用户的移动电话接通而无人应答时,来电呼叫会自动转移至用户预先设定的电话上,这是()呼叫转移业务。
古希腊的“悲剧之父”是()。
分时系统的特点是Ⅰ.多路性Ⅱ.交互性Ⅲ.独占性Ⅳ.及时性
Manyofthescientistsandengineersarejudged______howgreattheirachievementsare.
最新回复
(
0
)