CMS专题

单选题20. public float getSalary(Employee e) {  21. assert validEmployee(e);  22. float sal = lookupSalary(e);  23. assert (sal>0);  24. return sal;  25. }  26. private int getAge(Employee e) {  27. assert validEmployee(e);  28. int age = lookupAge(e);  29. 

题目
单选题
20. public float getSalary(Employee e) {  21. assert validEmployee(e);  22. float sal = lookupSalary(e);  23. assert (sal>0);  24. return sal;  25. }  26. private int getAge(Employee e) {  27. assert validEmployee(e);  28. int age = lookupAge(e);  29. assert (age>0);  30. return age;  31. }  Which line is a violation of appropriate use of the assertion mechanism?()
A

 line 21

B

 line 23

C

 line 27

D

 line 29

如果没有搜索结果,请直接 联系老师 获取答案。
如果没有搜索结果,请直接 联系老师 获取答案。
相似问题和答案

第1题:

阅读和理解下面程序段: class Manager extends Employee{ public Manager(String n,double s,int year,int month,int day){ super(n,s,year,month,day); bonus=0; } public double getSalary(){ double baseSalary-super.gerSalary(); return baseSalary+bonus; } public void setBonus(double b){bonus=b; ) private double bonus; } Manager是Employee的子类,其理由是( )。

A.Manager的适用范围较宽

B.extends关键字声明

C.Manager的域减小了

D.雇员是一个经理


正确答案:B
解析:本题考查Java中子类的概念。Java中通过在类声明中加入extends子句来创建子类,格式为:class SubClass extens SuperClass{…}。题目中class Manager extends Employee语句定义Manager类为Employee类的子类,所以选项B是正确答案。Manager类定义了Manager(String n,double s,int year,int month,int day)、getSalary()和setBonus(double b)成员方法和bonus成员变量。

第2题:

类testl定义如下: public class test1 { public float amethod(float a,float b){ } }

A.public foat amethod(float a,float b,foat c){ }

B.public float amethod(float c,float d){ }

C.public int amethod(int a,int b){ }

D.private float amethod(int a,int b,int c){ }


正确答案:B

第3题:

●试题五

阅读下列程序说明,将应填入(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小时

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:

//构造函数

Employee(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):

Employee(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小时

}

}


正确答案:

●试题五

【答案】(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()函数定义成虚函数,便可以实现了。

第4题:

interface Data { public void load(); }  abstract class Info { public abstract void load(); }  Which class correctly uses the Data interface and Info class?() 

  • A、 public class Employee extends Info implements Data { public void load() { /*do something*/ } }
  • B、 public class Employee implements Info extends Data { public void load() { /*do something*/ } }
  • C、 public class Employee extends Info implements Data { public void load() { /*do something */ } public void Info.load() { /*do something*/ } }
  • D、 public class Employee implements Info extends Data { public void Data.load() { /*dsomething */ } public void load() { /*do something */ } }
  • E、 public class Employee implements Info extends Data { public void load() { /*do something */ } public void Info.load(){ /*do something*/ } }
  • F、 public class Employee extends Info implements Data{ public void Data.load() { /*do something*/ } public void Info.load() { /*do something*/ } }

正确答案:A

第5题:

10. public class ClassA {  11. public void count(int i) {  12. count(++i);  13. }  14. }  And:  20. ClassA a = new ClassA();  21. a.count(3);  Which exception or error should be thrown by the virtual machine?() 

  • A、 StackOverflowError
  • B、 NullPointerException
  • C、 NumberFormatException
  • D、 IllegalArgumentException
  • E、 ExceptionlnlnitializerError

正确答案:A

第6题:

类Test定义如下,将下列( )方法插入③行处是不合法的。 ①publicClass Test{ ②public float Method(floatA,float b){} ③ ④}

A.public float Method(floatA,float b,floatC){}

B.public float Method(noatC,float d) {}

C.public int Method(intA,int b){}

D.private float Method(intA,int b,intC){}


正确答案:B

第7题:

类Test定义如下,将下列哪个方法插入③行处是不合法的( )?

① public class Test{

② public float Method(float a,float B) { }

③ ______

④ }

A.public float Method(float a,float b,float C) { }

B.public float Method(float c,float d){ }

C.public int Method(int a,int B) { }private float Method(int a,int b,int C) { }

D.private float Method(int a,int b,int C) { }


正确答案:B
解析:本题主要考查方法重载,方法的重载是指多个方法可以享有相同的名字,但参数的数量或类型必须不相同(采用不同的形式参数列表),选项B不符合方法重载的要求。

第8题:

类Test定义如下,将下列______方法插入③行处是不合法的。 ( )①public class Test{②public float Method(float a,float b){}③④}

A.public float Method(float a,float b,float c){}

B.public float Method(float c,float d){}

C.public int Method(int a,int b){}

D.private float Method(int a,int b,int c){}


正确答案:B
解析:该题考查的方法重载。在 Java程序中可以在同一个类中定义多个名称相同的方法,然而这些方法的参数数量和类型却不完全相同,这种现象被成为方法重载。在本题中,选项A是正确的,虽然它的参数的类型和第二行的参数类型相同,但是它的参数数量是不同的;选项B不正确,它的参数类型和参数数量都和第二行的相同;选项C正确,它的参数类型和第二行的参数类型不同;选项D也正确,它的参数类型和数量都不和第二行的相同。

第9题:

public class MethodOver {   public void setVar (int a, int b, float c) {   }   }   Which two overload the setVar method?()

  • A、 Private void setVar (int a, float c, int b) {}
  • B、 Protected void setVar (int a, int b, float c) {}
  • C、 Public int setVar (int a, float c, int b) (return a;)
  • D、 Public int setVar (int a, int b, float c) (return a;)
  • E、 Protected float setVar (int a, int b, float c) (return c;)

正确答案:A,C

第10题:

类Test1定义如下: 1.public class Test1{ 2. public float aMethod(float a,float b){ return 0;} 3. 4.} 将以下哪种方法插入行3是不合法的。()

  • A、public float aMethod(float a, float b,float c){ return 0;}
  • B、public float aMethod(float c,float d){ return 0;}
  • C、public int aMethod(int a, int b){ return 0;}
  • D、private float aMethod(int a,int b,int c){ return 0;}

正确答案:B

更多相关问题