[试题]

试题五

阅读下列程序说明,将应填入(n)处的字句写在答卷纸的对应栏内。

(程序说明)

对于一个公司的雇员来说,无非有3种:普通雇员、管理人员和主管。这些雇员有共同的数据:名字、每小时的工资,也有一些共同的操作:数据成员初始化、读雇员的数据成员及计算雇员的工资。但是,他们也有不同。例如,管理人员除有这些共同的特征外,有可能付固定薪水,主管除有管理人员的共同特征外,还有其他物质奖励等。3种雇员中,管理人员可以看作普通雇员的一种,而主管又可以看作管理人员的一种。我们很容易想到使用类继承来实现这个问题:普通雇员作为基类,管理人员类从普通雇员类中派生,而主管人员类又从管理人员类中派生。

下面的程序1完成上述各个类的定义,并建立了3个雇员(一个普通雇员、一个管理人员和一个主管)的档案,并打印出各自的工资表。将"程序1"中的成员函数定义为内联函数,pay成员函数定义为虚函数,重新完成上述要求。

(程序1)

//普通雇员类

class Employee

{

public:

E.mployee(char*theName,float thePayRate);

char*getName()const;

float getPayRate()const;

float pay(float hoursWorked)const;

protected:

char*name;//雇员名称

float payRate;//薪水等级

};

E.mployee::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):

E.mployee(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()

{

E.mployee 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小时

cout<<"Name:"<<m.getName()<<endl;

cout<<"Pay:"<<m.pay (40) <<endl;

cout<<"Name:"<<s.getName()<<endl;

cout<<"Pay:"<<s.pay (40) <<endl;//参数40在这里不起作用

}

(程序2)

#include"employee.h"

//普通雇员类

class Employee

{

public:

//构造函数

E.mployee(string theName,float thePayRate):

name(theName),payRate(thePayRate){}

//取雇员姓名

string getName() 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 isSalaried):

E.mployee(theName,thePayRate),salaried(isSalaried){}

//取付薪方式

bool getSalaried()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"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小时

}

}

参考答案与解析:

相关试题

试题四 阅读下列程序说明和C程序,将应填入(n)处的字句写在答卷纸的对应栏内。

[试题]试题四阅读下列程序说明和C程序,将应填入(n)处的字句写在答卷纸的对应栏内。(程序说明)该程序定义了两个子函数strsort和strmerge。它们分别实现了将一个字符串按字母顺序排序和将两个字符串合并排序,并删去相同字符。在主函数里,先输入两个字符串s1和s2,然后调用strsort函数对它们分别排序,然后调用strmerge函数将s1和s2合并,将合并后的字符串赋给字符串s3,最后输出字符串s3。(程序)#include<stdio.h>void strmerge(char*a,c

  • 查看答案
  • 试题五 阅读以下程序说明和C程序,将应填入(n)处的子句,写在答卷纸的对应栏内

    [试题]试题五阅读以下程序说明和C程序,将应填入(n)处的子句,写在答卷纸的对应栏内。(程序说明)函数int commstr(char *str1,char *str2,int *sublen)从两已知字符串str1和str2中,找出它们的所有最长的公共子串。如果最长公共子串不止1个,函数将把它们全部找出并输出。约定空串不作为公共子串。函数将最长公共子串的长度送入由参数sublen所指的变量中,并返回字符串str1和str2的最长公共子串的个数。如果字符串str1和str2没有公共子串,约定最长公共子串的

  • 查看答案
  • 试题五 阅读下列程序说明和C代码,将应填入(n)处的字句写在答卷的对应栏内。

    [试题]试题五阅读下列程序说明和C代码,将应填入(n)处的字句写在答卷的对应栏内。(程序5说明)下列文法可用来描述化学分子式的书写规则(例如,Al2(CO3)3、Cu(OH)2):λ→β/βλβ→δ/δnδ→ξ/ξθ\(λ)其中:λ是一个分子式;δ或是一个元素,或是一个带括号的(子)分子式,元素或是一个大写字母(记为ξ),或是一个大写字母和一个小写字母(记为ξθ);β或是一个δ,或是在δ之后接上一个整数n,δn表示β有n个δ的元素或(子)分子式。一个完整的分子式由若干个β组成。当然一个正确的分子式除符合

  • 查看答案
  • 试题五 阅读下列程序说明和C程序,将应填入程序中(n)处的字句,写在答卷纸的对

    [试题]试题五阅读下列程序说明和C程序,将应填入程序中(n)处的字句,写在答卷纸的对应栏内。(程序说明)本程序先从文件读入各考生的准考证号(设为整型数)及成绩,并将其存放在一棵检索二叉树上,二叉树结点的健值是成绩,每个结点带一链表,链表结点存放取得该成绩的考生的准考证号。然后,程序按中序遍历检索二叉树,从高分到低分输出结果,使每行输出成绩及其取得成绩的考生的准考证号。(程序)#include <stdio.h>typedef struct idnode {int id;struct idnod

  • 查看答案
  • 试题四 阅读下列函数说明,将应填入(n)处的字句写在答卷纸的对应栏内。 (函数

    [试题]试题四阅读下列函数说明,将应填入(n)处的字句写在答卷纸的对应栏内。(函数1说明)函数compare(SqList A,SqList B)的功能是:设A=(al,…,am)和B=(bl,…,bn)均为顺序表,"比较",两个顺序表A和B的大小。设A'和B'分别为A和B中除去最大共同前缀后的子表(例如,A=(y,x,x,z,x,z),B=(y,x,x,z,y,x,x,z),则两者中最大的共同前缀为(y,x,x,z),在两表中除去最大共同前缀后的子表分别为A′=(x,z)和B′=(y,x,x,z

  • 查看答案
  • 试题五 阅读下列程序说明和C£«£«代码,将应填入(n)处的字句写在答卷的对应

    [试题]试题五阅读下列程序说明和C++代码,将应填入(n)处的字句写在答卷的对应栏内。(说明)①定义类Table的私有数据成员x和y,分别用于表示九九表中的两个乘数(x*y),它们都是int型的数据。②完成类Table的成员函数print()的定义,该函数以"x*y=z"的格式打印出九九表中的一个乘法算式,请使用格式化输出函数printf实现。③完成类Table9的成员函数print()的定义,该函数调用基类Table的print()函数,将九九表输出到屏幕。④补充主函数,在屏幕上输出九九表,以便测试

  • 查看答案
  • 试题五 阅读下列程序说明和C£«£«代码,将应填入(n)处的字句写在答卷的对应

    [试题]试题五阅读下列程序说明和C++代码,将应填入(n)处的字句写在答卷的对应栏内。(说明)①在类体中添加函数move(double ax, double ay)的定义,使得点的坐标x和y分别移动ax和ay个单位。②在类定义外完成重载的两个构造函数CPosition()和CPosition(double dx, double dy),其中前者为不带参数的构造函数,使CPosition对象的默认值为x=0,y=0,后者为带参数的构造函数,把数据成员x和y分别初始化为参数dx和dy的值。③完成函数doubl

  • 查看答案
  • 试题六 阅读下列程序说明和C£«£«代码,将应填入(n)处的字句写在答卷的对应

    [试题]试题六阅读下列程序说明和C++代码,将应填入(n)处的字句写在答卷的对应栏内。(程序6说明)本程序实现两个多项式的乘积运算。多项式的每一项由类Item描述,而多项式由类List描述。类List的成员函数有:createList():创建按指数降序链接的多项式链表,以表示多项式。reverseList():将多项式链表的表元链接顺序颠倒。multiplyList(List L1,List L2):计算多项式L1和多项式L2的乘积多项式。(程序6)#include<iostream.h>c

  • 查看答案
  • 试题六 阅读下列程序说明和C£«£«代码,将应填入(n)处的字句写在答卷的对应

    [试题]试题六阅读下列程序说明和C++代码,将应填入(n)处的字句写在答卷的对应栏内。(说明)①为类Circle增加一个构造函数,该函数有一个参数,并在构造时将该参数值赋给成员radius。将该函数实现为一个非内联函数,并且使用参数列表的方式将类成员赋值。②为类Circle增加一个成员函数print(),使得可以输出有关圆的信息,比如下列程序C.ircle c;C.SetRadius (5) ;C.Print();将输出:The circle has radius of 5!③完成友元函数void Com

  • 查看答案
  • 试题六 阅读下列程序说明和C£«£«代码,将应填入(n)处的字句写在答卷的对应

    [试题]试题六阅读下列程序说明和C++代码,将应填入(n)处的字句写在答卷的对应栏内。(说明)源程序中定义了Circle类与Money类,Circle类可对半径为r的圆进行周长与面积的计算,而Money类用于计算一圆形游泳池的造价。游泳池四周有原形过道,过道外围上栅栏,过道宽度为3米,根据键入的游泳池半径,每米栅栏价格及每平方米过道价格,即可计算出游泳池的造价。请按要求完成下列操作,将程序补充完整。①定义符号常量PI(值为3.14159f)与WIDTH(值为3.00f),分别用于表示圆周率与过道的固定宽度

  • 查看答案
  • 试题五 阅读下列程序说明,将应填入(n)处的字句写在答卷纸的对应栏内。 (程序