(2013年上半年下午试题五)阅读下列说明和C++代码,将应填入(n)处的字句写在答题纸的对应栏内。 【说明】 现要求实现一个能够自动生成求职简历的程序,简历的基本内容包括求职者的姓名、性别、年龄及工作经历。希望每份简历中的工作经历有所不同

admin2018-07-27  31

问题 (2013年上半年下午试题五)阅读下列说明和C++代码,将应填入(n)处的字句写在答题纸的对应栏内。
    【说明】
    现要求实现一个能够自动生成求职简历的程序,简历的基本内容包括求职者的姓名、性别、年龄及工作经历。希望每份简历中的工作经历有所不同,并尽量减少程序中的重复代码。
    现采用原型模式(Prototype)来实现上述要求,得到如图10.19所示的类图。

【C++代码】
#include<string>
Using namespace  std;
Class Cloneable{
Public:
_____(1);
    };
    Class WrkExperience:public Cloneable{    //工作经历
    Private:
    String  workDate;
    String  company;
Public:
    Cloneable*Clone(){
    _____(2);
    Obj->workDate=this->workDate;
    Obj->company=this->company;
    Return obj;
    }
    //其余代码省略
  };
  Class Resume:public Cloneable{//简历
  Private:
    String name;string sex;string age;
    WOrkExperience*  work;
    Resume(WorkExperience*work){
    This->work=_____(3);
    }
Public:
  Resume(string name){/*实现省略*/  }
    Void  setPersona1 Info(string sex,string age){    /*实现省略*/    }
    Void setworkExperience(string  workDate,string company){  /*实现省略*/  }
    Cloneable*Clone(){
    _____(4);
    Obj->name=this->name;
    Obj->sex=this->sex;
    Obj->age=this->age;
    Return obj;
    }
  };
  Int main(){
    Resume*a=new Resume(’’张三’’);
    A->SetPersonalInfo(’’男’’,’’29’’);
    A->setworkExperience(’’1998"~’’2000’’,’’XXX公司’’);
    Resume*b= ______(5);
    B->setWorkExperience(’’2001"~’’2006’’,’’YYY公司’’);
    Return 0;
}

选项

答案(1)virtual Cloneable*Clone()=0 (2)WorkExperience*obj (3)Work (4)Resume*obj (5)a->Clone()

解析 本题考查原型模式的概念及应用,原型模型是一种对象创建模型,用原型实体指定创建对象的种类,并且通过复制这些原型创建新的对象。原型模型允许一个对象再创建另一个可定制的对象,无须知道任何创建的细节。
    原型模式其实就是常说的“虚拟构造函数”的一个实现,C++的实现机制中并不支持这个特性,但是通过不同派生类实现的Clone接口函数,可以完成与“虚拟构造函数”同样的效果。
    本题中声明一个虚拟基类,所有的原型都从这个基类继承,空(1)处所代表的就是这个基类中的纯虚函数,需要供继承者自行实现,因此应填入virtual Cloneable*Clone()=0,声明一个抽象基类,并定义Clone()函数为纯虚函数。然后根据基类实例化各个子类,并且实现复制构造函数,并实现clone()函数,由此可知空(2)处应填入WorkExperience*obj,空(3)处应填入Work,空(4)处应填入Resume*obj。在main函数中实现Resume*b对*a的复制,故根据C++语法,空(5)处应填入a->Clone()。
转载请注明原文地址:https://jikaoti.com/ti/5ea7FFFM
0

相关试题推荐
最新回复(0)