首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
计算机
阅读下列程序说明,将应填入(n)处的字句写在答卷纸的对应栏内。 【程序说明】 对于一个公司的雇员来说,无非有3种:普通雇员、管理人员和主管。这些雇员有共同的数据:名字、每小时的工资,也有一些共同的操作:数据成员初始化、读雇员的数据成员及计算雇员
阅读下列程序说明,将应填入(n)处的字句写在答卷纸的对应栏内。 【程序说明】 对于一个公司的雇员来说,无非有3种:普通雇员、管理人员和主管。这些雇员有共同的数据:名字、每小时的工资,也有一些共同的操作:数据成员初始化、读雇员的数据成员及计算雇员
admin
2009-02-15
32
问题
阅读下列程序说明,将应填入(n)处的字句写在答卷纸的对应栏内。
【程序说明】
对于一个公司的雇员来说,无非有3种:普通雇员、管理人员和主管。这些雇员有共同的数据:名字、每小时的工资,也有一些共同的操作:数据成员初始化、读雇员的数据成员及计算雇员的工资。但是,他们也有不同。例如,管理人员除有这些共同的特征外,有可能付固定薪水,主管除有管理人员的共同特征外,还有其他物质奖励等。3种雇员中,管理人员可以看作普通雇员的一种,而主管又可以看作管理人员的一种。我们很容易想到使用类继承来实现这个问题:普通雇员作为基类,管理人员类从普通雇员类中派生,而主管人员类又从管理人员类中派生。
下面的程序1完成上述各个类的定义,并建立了3个雇员(一个普通雇员、一个管理人员和一个主管)的档案,并打印出各自的工资表。将“程序1”中的成员函数定义为内联函数,pay成员函数定义为虚函数,重新完成上述要求。
【程序1】
//普通雇员类
class Employee
{
public:
Employee(char *theName, float thePayRate);
char *getName0 const;
float getPayRate0 const;
float pay,(float hours Worked) eonst;
protected:
ehar *name; //雇员名称
float payRate; //薪水等级
};
Employee::Employee(char *theName, float thePa~Rate)
{
name = the Name;
payRate = the PayRate;
}
char *Employee::getName0 eonst
return name;
float Employee::getPayRate0 const
return payRate;
float Employee::pay(float hoursWorked) const
return hours Worked * payRate;
class Manager: public Employee
{
public:
//is Salaried 付薪文方式:true 付薪固定工资,false 按小时付薪
Manager(char *the Name, float the Pay Rate, bool is Salaried);
bool getSalaried0 const;
float pay(float hoursWorked) const;
protected:
bool salaried;
};
Manager::Manager(ehar *theName,fioat thePayRate,bool isSalaried)
: Employee(theName, thePayRate)
{
salaried = isSalaried;
bool Manager::getSalaried0 eonst
{
return salaried;
}
float Manager::pay(float hoursWorked) eonst
{
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 getBouns0 const { return bouns; }
float pay(float hoursWorked) const
return (2);
}
protected:
float houris;
}
#include "iostream.h"
void main()
{
Employee e("Jack",50.00);
Manager m("Tom",8000.00,tme);
Supervior sCTanya",8000.00,8000.00);
cout<<"Name:"<<e.getName0<<endl;
cout <<"Pay: "<<e.pay(80)<<endl; //设每月工作80小时
cout <<"Name: "<<m.getName0<<endl;
cout <<"Pay: "<<m.pay(40)<<endl;
cout <<"Name: "<<s.getName0<<endl;
cout <<"Pay: "<<s.pay(40)<<endl; //参数40在这里不起作用
}
#include "employee.h"
class Employee
{
public:
Employee(string theName, float thePayRate):
name(theName),payRate(thePayRate) { }
string getName0 const {return name; }
float getPayRate0 const { return payRate; }
virtual float pay(float hoursWorked) const { return (3); }
protected:,
string name; //雇员名
Boat payRate; //薪水等级
};
//管理人员类
//继承普通雇员类
class Manager: public Employee
{
public:
//构造函数
//isSalaried标识管理人员类的付薪方式
//true 按阶段付薪(固定工资)
//false 按小时付薪
Manager(string theName, float thePayRate, bool isSalaried):
Employee(theName,thePayRate),salaried(isSalaried) { }
bool getSalaried0 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 getBouns0 const { return bouns; }
//计算薪水
virtual float pay(float hours Worked) const
{
(7)
float bouns;
#include "employee.h"
#nclude "iostream.h"
void main()
{
(8) *ep[3];
ep[0]=new Employee("Jack" ,"50.00");
ep[1]=new Manager("Tom", "8000.00",true);
ep[2]=new Supervior("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)hours Worked*payRate (4)hours Worked (5)hours Worked*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/CwDZ777K
本试题收录于:
软件设计师下午应用技术考试题库软考中级分类
0
软件设计师下午应用技术考试
软考中级
相关试题推荐
针对电子政务类应用系统的功能测试,为设计有效的测试用例,应(34)。
对需求说明书评测的内容包括______。①系统定义的目标是否与用户的要求一致②被开发项目的数据流与数据结构是否足够、确定③与所有其他系统交互的重要接口是否都已经描述④主要功能是否已包含在规定的软件范围之内,是否都已充分说明
软件测试的目的是______。A.试验性运行软件B.找出软件中的全部错误C.证明软件正确D.发现软件错误
CMM对软件测试没有提供单独的关键过程领域(KPA),所以许多研究机构和测试服务机构从不同角度出发提出了有关软件测试方面的能力成熟度模型,其中软件测试成熟度模型(TMM)是当前影响力最大的软件测试过程模型。TMM制定了5个成熟度等级,它们依次是:初始级、阶
A模块通过简单数据类型(如整型)参数访问B模块,该参数在B模块内用于数据计算,则A、B模块之间存在______。
()模型吸收了软件工程“演化”的概念,使用原型及其他方法来尽量降低风险,适合于大型复杂软件系统的开发。
给定关系模式R(A,B,C,D)、S(C,D,E),与π1,3,5等价的SQL语句如下:SELECT(22)FROMR,sWHERE(23);下列查询B=“信息”且E=“北京”的A、B、E的关系代数表达式中,查询效率
已知函数f()、g()的定义如下所示,执行表达式“x=f(5)”的运算时,若函数调用g(a)是引用调用(callbyreference)方式,则执行“x:f(5)”后x的值为(7);若函数调用g(a)是值调用(callbyvalue)方式,
1976年Diffie与Hellman首次公开提出___________的概念与结构,采用两个独立的密钥对数据分别进行加密与解密,且加密过程基于数学函数,从而带来了加密领域的革命性进步。
设用2K×4位的存储器芯片组成16K×8位的存储器(地址单元为0000H~3FFFH,每个芯片的地址空间连续),则地址单元0B1FH所在芯片的最小地址编号为______。A.0000HB.2800HC.2000HD.0800H
随机试题
WhenIwasaboy,childrenalwaysobjected【C1】______wearingschooluniformbutteacherswere【C2】______onitbecausetheysai
影响肾小球滤过率的因素有
A.游离胃酸缺乏B.血清酸性磷酸酶升高C.血清碱性磷酸酶下降D.血清甲胎蛋白阳性E.血清癌胚抗原阳性原发性肝癌()
上消化道出血时对病因诊断最有帮助的检查方法是
问题患者中,多重抱怨的患者是指
经济萧条是指()。
甲、乙、丙分别出资5000万元、2000万元、3000万元于2006年1月1日设立奥都股份有限公司,2007年1月1日奥都公司与丁、戊分别出资50万元、30万元、20万元设立一普通合伙企业,同年6月1日奥都公司又出资1000万设立海航一人有限责任公司。20
下列关于大额可转让定期存单的说法,错误的是()。
[2003年MPA真题]未来深海电缆的外皮是由玻璃制成的,而不是特殊的钢材或铝合金。原因是金属具有颗粒状的微观结构,在深海压力之下,粒子交结处的金属外皮易于断裂。玻璃外皮就不会有这种情况,因为玻璃看起来是固体,由于它在压力之下可以流动,所以可将之视为液体。
SowhydoItalkaboutthebenefitsoffailure?Simplybecausefailuremeantastrippingawayoftheinessential.Istoppedpret
最新回复
(
0
)