niusouti.com

阅读下列说明和C++代码,将应填入(n)处的字句写在对应栏内。【说明】已知某类库开发商提供了一套类库,类库中定义了Application类和Document类,它们之间的关系如下图所示。其中,Application类表示应用程序自身,而Document类则表示应用程序打开的文档。Application类负责打开一个已有的以外部形式存储的文档,如一个文件,一旦从该文件中读出信息后,它就由一个Document对象表示。当开发一个具体的应用程序时,开发者需要分别创建自己的Application和Document

题目

阅读下列说明和C++代码,将应填入(n)处的字句写在对应栏内。

【说明】

已知某类库开发商提供了一套类库,类库中定义了Application类和Document类,它们之间的关系如下图所示。其中,Application类表示应用程序自身,而Document类则表示应用程序打开的文档。Application类负责打开一个已有的以外部形式存储的文档,如一个文件,一旦从该文件中读出信息后,它就由一个Document对象表示。

当开发一个具体的应用程序时,开发者需要分别创建自己的Application和Document子类,例如上图中的类MyApplication和类MyDocument,并分别实现Application和 Document类中的某些方法。

已知Application类中的openDocument方法采用了模板方法(Template Method)设计模式,该方法定义了打开文档的每一个主要步骤,如下所示:

1.首先检查文档是否能够被打开,若不能打开,则给出出错信息并返回;

2.创建文档对象;

3.通过文档对象打开文档;

4.通过文档对象读取文档信息;

5.将文档对象加入到Application的文档对象集合中。

【C++代码】

include<iostream>

include<vector>

using namespace std;

class Document{

public:

void save(){/*存储文档数据,此处代码省略*/)

void open(string docName){ /*打开文档,此处代码省略*/)

void close(){ /*关闭文档,此处代码省略*/)

virtual void read(string docName) =0;

};

class Appplication{

private:

vector<(1)> docs; /*文档对象集合*/

public:

bool canOpenDocument(string docName){

/*判断是否可以打开指定文档,返回真值时表示可以打开,

返回假值表示不可打开,此处代码省略*/

}

void addDocument(Document * aDocument){

/*将文档对象添加到文档对象集合中*/

docs.push_back((2));

}

virtual Document * doCreateDocument()=0;/*创建一个文档对象*/

void openDocument(string docName){/*打开文档*/

if ((3)){

cout<<“文档无法打开!”<<endl;

return;

}

(4) adoc=(5);

(6);

(7);

(8);

}

};


相似考题
更多“ 阅读下列说明和C++代码,将应填入(n)处的字句写在对应栏内。【说明】已知某类库开发商提供了一套类库,类库中定义了Application类和Document类,它们之间的关系如下图所示。其中,Applicatio”相关问题
  • 第1题:

    阅读以下说明和流程图,将应填入(n)处的字句写在对应栏内。

    【说明】

    已知头指针分别为La和lb的有序单链表,其数据元素都是按值非递减排列。现要归并La和Lb得到单链表Lc,使得Lc中的元素按值非递减排列。程序流程图如下所示:


    正确答案:(1)pa->data=pb->data (2)pc->next=pa (3)pc=pb (4)pb=pb->next (5)pc->next=pa?pa:pb
    (1)pa->data=pb->data (2)pc->next=pa (3)pc=pb (4)pb=pb->next (5)pc->next=pa?pa:pb 解析:本题考查程序流程图和有序链表的归并。
    题目要求我们归并头指针分别为La和Lb的有序单链表,组成一个新的有序单链表 Lc,而Lc又是指向La的。首先,我们来了解一下单链表的结构。单链表中一般有两个域,一个是数据域,用来存放链表中的数据;另一个是指针域,用来存放指向下个结点的指针。其归并的过程应该是先比较链表La和Lb中第一个元素,将较小的从其链表中取出放到k中,再取下一个结点的值去比较,重复这个过程,直到一个链表被全部取完,再将另一个链表剩下的部分连接到Lc后面即可。
    下面,我们来看程序流程图的内容。首先是用两个指针变量pa和pb分别指向La和Lb的当前待比较插入的结点,而pc指向Lc表中当前最后一个结点。再下面是一个条件判断语句,其作用是判断链表La和Lb是否为空,如果有一个为空,只要将另一个链表剩下的部分连接到Lc后面,程序应该就可以结束了。
    第(1)空是条件判断语句的条件,根据我们上面的分析,再结合流程图下面的内容,我们可以知道,这个条件语句的作用是比较当前待插入的两个值的大小,而指针变量pa和pb分别指向La和Lb的当前待比较插入的结点,因此,此空的答案为 pa->data=pb->data。
    第(2)空是在条件为真的情况下执行的语句,如果条件判断为真,应该将pa所指结点连接到pc所指结点后面,因此,pc所指结点的指针域应该存放pa所指结点的地址。所以,此空的答案为pc->next=pa。
    第(3)空和第(4)空都是在条件为假的情况下执行的语句,如果条件为假,说明 pb所指结点的值小于pa所指结点的值,应该将pb所指结点连接到pc所指结点后面,图中已经实现这一功能,要我们完成的是在插入后的后继工作。由于pc指向的是Lc表中当前最后一个结点,在插入一个结点后,要修改pc的值。在将pb所指结点插入后,链表中的最后一个结点就是pb所指结点,第(3)空的答案应该为pc=pb。执行完这些功能后,指针pb应该要往后移动,即指向下一个结点,第(4)用来完成这个功能,所以答案为pb=pb->next。
    在前面,我们已经讲到如果链表La和Lb有一个为空,只要将另一个链表剩下的部分连接到Lc后面即可。第(5)空就是用来完成这个功能的,但我们不知道具体是哪个链表为空,还需要判断,因此,此空答案为pc->next=pa?pa:pb。

  • 第2题:

    读下列说明和Java代码,将应填入(n)处的字句写在对应栏内。

    【说明】

    已知某类库开发商捉供了一套类库,类库中定义了Application类和Document类,它们之间的关系如下图所示,其中,Application类表示应用程序自身,而Document类则表示应用程序打开的文档。Application类负责打开一个已有的以外部形式存储的文档,如一个文件,一旦从该文件中读出信息后,它就由一个Document对象表示。

    当开发一个具体的应用程序时,开发者需要分别创建自己的Application和Document子类,例如上图中的类MyApplication和类MyDocument,并分别实现Application和 Document类中的某些方法。

    已知Application类中的openDocument方法采用了模板方法(Template Method)设计模式,该方法定义了打开文档的每一个主要步骤,如下所示:

    1.首先检查文档是否能够被打开,若不能打开,则给出出错信息并返回;

    2.创建文档对象;

    3.通过文档对象打开文档;

    4.通过文档对象读取文档信息;

    5.将文档对象加入到Application的文档对象集合中。

    【Java代码】

    abstract class Document{

    public void save(){/*存储文档数据,此处代码省略*/ )

    public void open(String docName){ /*打开文档,此处代码省略*/)

    public void close(){ /*关闭文档,此处代码省略*/)

    public abstract void read(String docName);

    };

    abstract class Appplication{

    private Vector<(1)> docs; /*文档对象集合*/

    public boolean canOpenDocument(String docName){

    /*判断是否可以打开指定文档,返回真值时表示可以打开,

    返回假值表示不可打开,此处代码省略*/

    }

    public void addDocument(Document aDocument){

    /*将文档对象添加到文档对象集合中*/

    docs.add((2));

    }

    public abstract Document doCreateDocument();/*创建一个文档对象*/

    public void openDocument(String docName){/*打开文档*/

    if ((3)) {

    System.out.println(“文档无法打开!”);

    return;

    }

    (4) adoc=(5);

    (6);

    (7);

    (8);

    }

    };


    正确答案:(1)Document (2)aDocument (3)!canOpenDocument(docName) (4)Document (5)doCreateDocument() (6)adoc.open(docName) (7)adoc.read(docName) (8)addDocument(adoc)
    (1)Document (2)aDocument (3)!canOpenDocument(docName) (4)Document (5)doCreateDocument() (6)adoc.open(docName) (7)adoc.read(docName) (8)addDocument(adoc) 解析:本题考查了Java语言的应用能力和模板方法设计模式。空(1)考查了Java库中Vector模板类的使用,由于Vector模板类可以存储任意类型,在定义时需要指定其存储类型,根据后面的代码,能够加入到该文档集合对象的类型为文档类型,因此空(1)处的类型应该为Document。空(2)处将文档对象加入文档集合对象中。从空(3)开始的代码属于图中Application类的OpenDocument方法,该方法是模板方法,因此,需根据题目给出的步骤一一对应填空。空(3)处判断能否打开文档,需要调用父类自己的方法canOpen- Document。其次需要创建文档对象,调用doCreateDocument方法,接着通过文档对象打开和读取文档,最后通过addDocument方法将该文档对象加入到文档对象集合中。所有这些方法都是在父类或文档对象中进行定义,不涉及到具体的子类。而子类负责要实现这些模板方法中需要调用的方法以便运行时被调用。

  • 第3题:

    阅读下列程序说明和C++程序,把应填入其中(n)处的字句,写在对应栏内。

    【说明】

    阅读下面几段C++程序回答相应问题。

    比较下面两段程序的优缺点。

    ①for (i=0; i<N; i++ )

    {

    if (condition)

    //DoSomething

    else

    //DoOtherthing

    }

    ②if (condition) {

    for (i =0; i<N; i++ )

    //DoSomething

    }else {

    for (i=0; i <N; i++ )

    //DoOtherthing

    }


    正确答案:程序1优点:程序简洁;缺点:多执行了N-1次逻辑判断并且程序无法循环“流水”作业使得编译器无法对循环进行优化处理降低了效率。 程序2优点:循环的效率高;缺点:程序不简洁。
    程序1优点:程序简洁;缺点:多执行了N-1次逻辑判断,并且程序无法循环“流水”作业,使得编译器无法对循环进行优化处理,降低了效率。 程序2优点:循环的效率高;缺点:程序不简洁。

  • 第4题:

    C++本身没有定义I/O操作,但I/O操作包含在C++实现中。C++标准库iostream提供了基本的I/O类,它包括类iostream和( )。

    A.fstream

    B.ostream

    C.iostream

    D.cin


    正确答案:B
    解析:C++中,istream类提供了向流中插入数据的有关操作,ostream类提供了从流中读取数据的有关操作。

  • 第5题:

    试题三(共 15 分)

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


    正确答案:

  • 第6题:

    阅读以下说明和Visual Basic代码,将应填入(n)处的字句写在答题纸的对应栏内。

    【说明】

    某绘图系统定义了一个抽象类IShape,现有三个类CPoint、CLine和CCircle,它们都具有IShape界面。相应的类图关系如图7-1所示。

    已知某第三方库已经提供了XCircle类,且完全满足CCircle图元显示时所需的功能。代码7-1是抽象类IShape的类模块内容,代码7-2实现了类CCircle的IShape界面,并使用了XCircle提供的显示功能。

    XCimle提供的显示功能方法接口为displayIt。

    【代码7-1】

    Public Color As Long

    Sub draw()

    '方法体不包括可执行语句

    End Sub

    Sub move(stepx As Single,stepy As Smgle)

    '方法体不包括可执行语句

    End Sub

    【代码7-2】

    (1)

    Private color As Long

    … ‘其他定义省略

    Private bridged As (2)

    Private Sub Class_Initialize ( )

    Set bridged=(3)

    End Sub

    Private Property (4) ( )As Long

    IShape_Color = color

    End Property

    Private Property (5) (ByVal newColor As Long)

    color=newColor

    End Property

    Private Sub IShape_draw ( ) '使用XCirele提供的显示功能

    (6)

    End Sub

    Private Sub IShape_move (stepx As Single, stepy As Single)

    … '省略描述

    End Sub


    正确答案:(1)Implemellts IShape (2)XCirc1e (3)New XCircle (4)Get IShspe_Co1or (5)Let IShspe_Co1or (6)bridSed.displayIt
    (1)Implemellts IShape (2)XCirc1e (3)New XCircle (4)Get IShspe_Co1or (5)Let IShspe_Co1or (6)bridSed.displayIt 解析:在VB中,抽象类模块只包含属性和方法的定义,而不包括任何可执行代码。本题目中定义的抽象类Ishape中定义了一个属性color、两个方法draw和move。
    在实现界面时,需要在有Ishape界面的类模块的说明段中添加一个Implements关键字,因此空(1)处应填入“Implemems IShape"。根据试题中的说明部分可知,类CCircle中要使用XCircle提供的显示功能,需声明XCircle的实例变量并生成和引用实例对象,因此空(2)处应填入“XCircle”,空(3)处填入“New XCircle”,空(6)处填入“bridged.displaylt”。
    由“color=newColor”可知,空(5)处所在的Property过程使CCircle的私有数据成员color取得外部设置的newColor值,因此空(5)填入“Let IShape Color"。
    同理由“IShape_Color=color”可知,空(4)处所在的Property过程使IShape_Color取得CCircle的私有数据成员color的值,因此空(4)填入“Get IShape Color”。

  • 第7题:

    C++定义了类库实现数据的输入和输出,______为根基类。


    正确答案:ios
    ios

  • 第8题:

    阅读下列说明和Java代码,将应填入(n)处的字句写在对应栏内。某饭店在不同的时段提供多种不同的餐饮,其菜单的结构图如图5-1所示。

    现在采用组合(Composition)模式来构造该饭店的菜单,使得饭店可以方便地在其中增加新的餐饮形式,得到如图5-2所示的类图。其中MenuComponent为抽象类,定义了添加(add)新菜单和打印饭店所有菜单信息(print)的方法接口。类Menu表示饭店提供的每种餐饮形式的菜单,如煎饼屋菜单、咖啡屋菜单等。每种菜单中都可以添加子菜单,例如图5-1中的甜点菜单。类MenuItem表示菜单中的菜式。


    答案:
    解析:
    (1) abstract class或public abstract class(2) public abstract void add (MenuComponent menuComponent)或abstract void add (MenuComponent menuComponent)或protected abstract void add (MenuComponent menuComponent)(3) add (menuComponent)(4) menuComponent.print ()(5) allMenus.print ()

  • 第9题:

    阅读下列说明和C++-代码,将应填入(n)处的字句写在答题纸的对应栏内。 【说明】 某发票(lnvoice)由抬头(Head)部分、正文部分和脚注(Foot)部分构成。现采用装饰(Decorator)模式实现打印发票的功能,得到如图5-1所示的类图。

    【C++代码】 #include using namespace std; class invoice{ public: (1){ cout<<"This is the content of the invoice!"<

    答案:
    解析:
    (1) virtual void printInvoice() (2) ticket->printInvoice() (3) Decorator::printInvoice() (4) Decorator::printInvoice() (5) &a
    【解析】

    试题分析
    1.Invoice类下,义虛函数,按类图,函数名是printInvoice
    2.前面定义对象名是ticket,那么在ticket不为空的时候调用函数printInvoice
    3.这部分填写发票的抬头,看类图应该实现函数printInvoice ,Decorator装饰模式使用该方法
    4.这部分是发票的脚注,看类图应该实现函数printlnvoice,Decorator装饰模式使用该方法
    5.FootDecorator a(NULL) ;脚步的装饰参数是a,调用a参数,

  • 第10题:

    阅读下列说明和 Java 代码,将应填入(n)处的字句写在答题纸的对应栏内。 【说明】 某软件公司欲开发一款汽车竞速类游戏,需要模拟长轮胎和短轮胎急刹车时在路面上 留 下的不同痕迹,并考虑后续能模拟更多种轮胎急刹车时的痕迹。现采用策略(Strategy) 设 计模式来实现该需求,所设计的类图如图 5-1 所示。




    答案:
    解析:
    1.void stop()2.BrakeBehavior3.wheel.stop()4.wheel=behavior5.brake()

  • 第11题:

    阅读下列说明和Java代码,将应填入(n)处的字句写在答题纸的对应栏内。【说明】 某文件管理系统中定义了类OfficeDoc和DocExplorer,当类OfficeDoc发生变化时,类DocExplorer的所有对象都要更新其自身的状态,现采用观察者(Observer)设计模式来实现该需求,所设计的类图如图6-1所示。



    答案:
    解析:
    1: void update()2: Observer3: obs.update()4: Subject5: Attach(this)

  • 第12题:

    单选题
    C++语言本身没有定义I/O操作,C++标准库iostream提供了基本的I/O类。I/O操作分别由两个类istream和()提供,由它们派生出一个类iostream,提供双向I/O操作。
    A

    fstream

    B

    iostream

    C

    ostream

    D

    cout


    正确答案: C
    解析: 暂无解析

  • 第13题:

    阅读下列说明和c++代码,将应填入(n)处的字句写在答题纸的对应栏内。

    【说明】

    某软件公司现欲开发一款飞机飞行模拟系统,该系统主要模拟不同种类飞机的飞行特征与起飞特征。需要模拟的飞机种类及其特征如表5-l所示。

    为支持将来模拟更多种类的飞机,采用策略设计模式(Strategy)设计的类图如图5—1所示。

    图5-l中,AirCraft为抽象类,描述了抽象的飞机,而类Helicopter、AirPlane、Fighter和Harrier分别描述具体的飞机种类,方法fly( )和takeOff( )分别表示不同飞机都具有飞行特征和起飞特征;类FlyBehavior与TakeOffBehavior为抽象类,分别用于表示抽象的飞行行为与起飞行为;类SubSonicFly与SuperSonicFly分别捕述亚音速飞行和超音速飞行的行为;类Verti calTakeOff与LongDistanceTakeoff分别描述垂直起飞与长距离起飞的行为。

    【C++代码】

    include

    using namespace std;

    class FlyBehavior{

    public:virtual void fly( )=0;

    };

    class SubSonicFly:public FlyBehavior{

    public: void fly( ){cout<<"亚音速飞行! "<


    正确答案:(1)FlyBehavior flyBehavior (2)TakeOffBehavior takeOffBehavior (3)flyBehavior.fly( ) (4)takeOffBehavior.takeOff( ) (5)SuperSonicFly( ) (6)VerticalTakeOff( ) (7)Helicopter( )
    (1)FlyBehavior. flyBehavior. (2)TakeOffBehavior. takeOffBehavior. (3)flyBehavior.fly( ) (4)takeOffBehavior.takeOff( ) (5)SuperSonicFly( ) (6)VerticalTakeOff( ) (7)Helicopter( ) 解析:Helicopter类继承AirCraft类,引用了FlyBehavior类的对象flyBehavior和TakeOffBehavior类的对象takeOffBehavior。
    因为AirCraft类没有实现fly( )和takeOff( ),所以需要在Helicopter类中添加FlyBehavior类的对象和TakeOffBehavior类的对象,故空(1)、空(2)应填FlyBehavior. flyBehavior和TakeOffBehavior. takeOffbehavior。
    空(3)要实现flny行为故调用对象flyBehavior.fly( ),同理空(4)要实现takeOffBehavior行为故调用takeOffBehavior.takeOff()。
    空(5)、空(6)考查多态调用,因为Helicopter类为垂直起飞和亚音速飞行,故应分别添SuperSonicFly( )和VerticalTakeOff( )。
    空(7)应添写Helicopter类的析构函数,实现内存释放。

  • 第14题:

    阅读以下说明和C++代码,将应填入(n)处的字句写在对应栏内。

    【说明】

    C++标准模板库中提供了vector模板类,可作为动态数组使用,并可容纳任意数据类型,其所属的命名空间为std。vector模板类的部分方法说明如下表所示:

    【C++代码】

    include <iostream>

    include <vector>

    using namespace (1);

    typedef vector< (2) > INTVECTOR;

    const int ARRAY_SIZE = 6;

    void ShowVector (INTVECTOR &theVector);

    int main() {

    INTVECTOR theVector;

    // 初始化 theVector, 将theVector的元素依次设置为0至5

    for (int cEachItem = 0; cEachItem < ARRAY_SIZE; cEachItem++}

    theVector.push_back((3));

    ShowVector(theVector); // 依次输出theVector中的元素

    theVector.erase (theVector.begin () + 3};

    ShowVector(theVector);

    }

    void ShowVector (INTVECTOR &theVector) {

    if (theVector.empty ()) {

    cout << "theVector is empty." << endl; return;

    }

    INTVECTOR::iterator (4);

    for (theIterator=theVector.begin(); theIterator !=theVector.end(); theIterator++) {

    cout << *theIterator;

    if (theIterator != theVector.end()-1) cout << ", ";

    }

    cout << end1;

    }

    该程序运行后的输出结果为:

    0,1,2,3,4,5

    (5)


    正确答案:(1) std (2) int (3) cEachItem (4) theIterator (5) 01245
    (1) std (2) int (3) cEachItem (4) theIterator (5) 0,1,2,4,5 解析:本题主要考查C++语言的基本使用以及类库的应用。
    在使用标准C++库中所提供的对象时,一般需要引用标准的命名空间。所以空(1)需要填入标准的命名空间std。空(2)处主要考查是否会使用C++提供的模板类。C++中Vector模板类可存储任意类型,在定义Vector模板类的对象时,需要指定Vector对象的类型。从后面的代码可以看出,Vector被用于存储整型数,所以,空(2)处应填写整型血。初始化代码将0到5共6个整数存储到theVector对象中,所以,空(3)处将循环变量的值存入theVector中。空(4)处代码部分主要是循环输出theVector对象的内容,使用了迭代器的访问方式,因此空(4)处应该为定义迭代器变量,在后续的循环中使用该变量。程序运行时将首先输出0至5,其次会删除第3个元素,再次输出时将不再包含整数3。

  • 第15题:

    阅读以下说明和JAVA 2代码,将应填入(n)处的字句写在对应栏内。

    [说明]

    以下程序为类类型的变量应用实例,通过异常处理检验了类CCircle的变量的合法性,即参数半径应为非负值。仔细阅读代码和相关注释,将程序补充完整。

    [JAVA代码]

    //定义自己的异常类

    class CCircleException extends Exception

    {

    }

    // 定义类 CCircle

    class CCircle

    {

    private double radius;

    public void setRadius ( double r ) (1)

    {

    if ( r<0 ) {

    (2)

    }

    else

    (3)

    }

    Public void show ( ) {

    System. out. println ( "area="+3.14*radius*radius );

    }

    }

    public class ciusample

    {

    public static void main ( String args[] )

    {

    CCircle cir=new CCircle( );

    (4) {

    cir. setRadius ( -2.0 )

    }

    (5)

    {

    System. out. println ( e+" throwed" ) ;

    }

    cir. show( ) ;

    }

    }


    正确答案:(1)throws CCircleException (2)throw new CCircleException(); //抛出异常 (3)radius=r; (4)try (5)catch(CCircleException e) //捕捉由setRadius()抛出的异常
    (1)throws CCircleException (2)throw new CCircleException(); //抛出异常 (3)radius=r; (4)try (5)catch(CCircleException e) //捕捉由setRadius()抛出的异常 解析:本题主要考查JAVA语言中Class类型的变量应用。本段代码中对于类Ccircle的半径变量进行合法性检验,如果圆Ccircle的半径为负值,则抛出异常处理。

  • 第16题:

    阅读下列说明和c++代码,将应填入(n)处的字句写在答题纸的对应栏内。

    【说明】

    某灯具厂商欲生产一个灯具遥控器,该遥控器具有7个可编程的插槽,每个插槽都

    有开关按钮,对应着一个不同的灯。利用该遥控器能够统一控制房间中该厂商所有品牌

    灯具的开关,现采用Command(命令)模式实现该遥控器的软件部分。Command模式

    的类图如图5-1所示。

    【c++代码】

    }


    正确答案:
    本题考查命令(Command)模式的基本概念和应用。命令模式把一个请求或者操作封装到一个对象中。命令模式允许系统使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。在软件系统中,行为请求者与行为实现者之间通常呈现一种紧耦合的关系。但在某些场合,比如要对行为进行记录撤销重做事务等处理,这种无法抵御变化的紧耦合是不合适的。这种情况下,使用Command模式将行为请求者与行为实现者进行解耦。题目中给出了Command模式的类图,其中:Command类为所有命令声明了一个接口。调用命令对象的execute()方法,就可以让接收者进行相关的动作。ConcreteCommand类定义了动作和接收者之间的绑定关系。调用者只要调用execute()就可以发出请求,然后由ConcreteCommand调用接收者的一个或多个动作。Invoker持有一个命令对象,并在某个时间点调用命令对象的execute()方法,将请求付诸实行。Receiver知道如何进行必要的工作,实现这个请求。任何类都可以当接收者。了解了Command模式的内涵之后,下面来看程序。由于Command类的主要作用是为所有的ConcreteCommand定义统一的接口,在c++中通常采用抽象类来实现。C++的抽象类是至少具有一个纯虚拟函数的类。本题中的接口就是execute()方法,所以(1)处要求填写的是纯虚拟函数cxecute的定义方式,即vifrualvoidexecute()=0。类LightOnCammand、LightOfiCommand对应的就是模式中的ConcreteCommand;ConcreteCommand中execute()方法的代码在类图中已经给出,现在需要确定recelver是谁。类Light充当的是Receiver,其中定义了两种action:on和off.所以(2)、(3)对应代码分别为light->on()、light->off()。类RemoteControl对应的是模式中的Invoker,在该类中设置需要控制的命令对象。(4)处对应的代码为onCommands[slot],设置“开灯”命令对象;(5)处对应的代码为affcommands[slot].设置‘关灯”命令对象。类RemoteControl中的方法onButtanWasPushed和offlButtonWasPushed,分别完成对开灯、关灯命令对象的execute方法的调用,所以(6)、(7)处分别对应代码onCommands[slot]->execute()、offCommands[slot]->execute()。试题五参考答案(1)virtualvoidexecute()=0(2)light->on()(3)light->off()(4)onCommands[slot](5)offCommands[slot](6)onCommands[slot]->execute()(7)offCommands[slot]->execute()

  • 第17题:

    试题六(共 15 分)

    阅读以下说明和 C++代码,将应填入 (n) 处的字句写在答题纸的对应栏内。

    [说明]

    C++标准模板库中提供了 vector 模板类,可作为动态数组使用,并可容纳任意数据类型,其所属的命名空间为 std。vector模板类的部分方法说明如下表所示:

    [C++代码]

    include <iostream>

    include <vector>

    using namespace (1) ;

    typedef vector< (2) > INTVECTOR;

    const int ARRAY_SIZE = 6;

    void ShowVector(INTVECTOR &theVector);

    int main(){

    INTVECTOR theVector;

    // 初始化 theVector,将 theVector的元素依次设置为 0 至 5

    for (int cEachItem = 0; cEachItem < ARRAY_SIZE; cEachItem++)

    theVector.push_back( (3) );

    ShowVector(theVector); // 依次输出 theVector中的元素

    theVector.erase(theVector.begin() + 3);

    ShowVector(theVector);

    }

    void ShowVector(INTVECTOR &theVector) {

    if (theVector.empty()) {

    cout << "theVector is empty." << endl; return;

    }

    INTVECTOR::iterator (4) ;

    for (theIterator = theVector.begin(); theIterator != theVector.end(); theIterator++){

    cout << *theIterator;

    if (theIterator != theVector.end()-1) cout << ", ";

    }

    cout << endl;

    }

    该程序运行后的输出结果为:

    0, 1, 2, 3, 4, 5

    (5)


    正确答案:


  • 第18题:

    阅读以下说明和c++代码,将应填入 (n) 处的字句写在答题纸的对应栏内。

    【说明】

    c++标准模板库中提供了map模板类,该模板类可以表示多个“键一值”对的集合,其中键的作用与普通数组中的索引相当,而值用作待存储和检索的数据。此外,c++模板库还提供了pair模板类,该类可以表示一个“键-值”对。pair对象包含两个属性:first和second,其中first表示“键-值”中的“键”,而Second表示“键-值”中的“值”。map类提供了insert方法和find方法,用于插入和查找信息。应用时,将一个pair。对象插入(insert)到map对象后,根据“键”在map对象中进行查找(find),即可获得一个指向pair对象的迭代器。下面的c++代码中使用了map和pair模板类,将编号为1001、1002、1003的员工信息插入到map对象中,然后输入一个指定的员工编号,通过员工编号来获取员工的基本信息。员工编号为整型编码,员工的基本信息定义为类employee。map对象与员工对象之间的关系及存储结构如图5—1所示。

    【c++代码】

    include

    include

    include

    using namespace std;

    class employee {(1) :

    employee(string name,string phoneNumber,string address){

    this->name=name;

    this->phoneNumber=phoneNumber ;

    this->address=address;

    }

    string name;

    string phoneNumber;

    string address;

    );

    int main()

    {

    mapemployeeMap;

    typedef pair>employeeNo; //从标准输入获得员工编号

    map::const_iterator it;

    it= (5) .find(employeeNo); //根据员工编号查找员工信息

    if(it==employeeMap.end()){

    cout<first<second一>nafae(phoneNumber<second->address<


    正确答案:(1)public (2)temp (3)insert (4)cin (5)employeeMap
    (1)public (2)temp (3)insert (4)cin (5)employeeMap 解析:在c++中,在生成类的对象的时候需要调用类的构造函数,因此employee的构造函数应该是公有函数,在代码中的空(1)处的答案为“public ”;在空(2)所在行通过注释可以看出来在这一行我们需要把char型的数组temp转换成string型的对象,所以空(2)的答案为“temp”;在空(3)所在的代码行我们构造了一个新的员工对象,并将其插入Pair对象中,按照代码注释的意思需要将这个Pair对象添加到employeeMap对象中,在题目前面的说明中已经给出了Map类的使用方法,可以直接通过调用Map类中的insert函数实现这一功能,所以空(3)的答案为“insert”;空(4)处需要从标准输入获得员工编号,c++的标准类库中已经提供了标准输入函数cin,所以这里的答案为“cin”;空(5)处根据注释我们知道是要根据员工编号查找员工信息,这里我们可以直接调用Map类的find函数来实现,因而之前员工编号和员工信息都是通过调用Map类的insert函数存储在Map类的实例employeeMap中,所以空(5)的答案为“employeeMap”。

  • 第19题:

    (a)智能网概念模型中分布功能平面模型如下图所示,请根据此图将应填入(n)处的 字句写在答题纸的对应栏内。


    正确答案:
    (1)SMF(或业务管理功能)
    (2)SCEF(或业务生成功能)
    (3)SDF(或业务数据功能)
    (4)SCF(或业务控制功能)
    (5)SSF(或业务交换功能)
    (6)CCF(或呼叫控制功能)

  • 第20题:

    阅读下列说明和 C ++代码,将应填入(n)处的字句写在答题纸的对应栏内。【说明】某软件公司欲开发一款汽车竞速类游戏,需要模拟长轮胎和短轮胎急刹车时在路面上留 下的不同痕迹,并考虑后续能模拟更多种轮胎急刹车时的痕迹。现采用策略(Strategy)设计模式来实现该需求,所设计的类图如图 6-1 所示。

    【C++ 代码】#includeusing namespace std;class BrakeBehavior{public:(1) ; /*其余代码省略*/};class LongWheelBrake : public BrakeBehavior{public:void stop(){cout <<"模拟长轮胎刹车痕迹! "<< end1;} /*其余代码省略*/};class ShortWheelBrake : public BrakeBehavior{public:void stop(){cout<"模拟短轮胎刹车痕迹! "<< end1;} /*其余代码省略*/};class Car{protected: (2) wheel;public:void brake(){ (3) ; } /*其余代码省略*/};class ShortWheelCar : public Car{public:ShortWheelCar(BrakeBehavior* behavior){ (4);} /*其余代码省略*/};int main(){BrakeBehavior* brake= new ShortWheelBrake();ShortWheelCar car1(brake):car1. (5) ;return 0;}


    答案:
    解析:
    1. virtual void stop( )=02. BrakeBehavior*3. Wheel->stop( )4. wheel=behavior5. brake( )

  • 第21题:

    阅读下列说明和C++代码,回答问题,将解答填入答题纸的对应栏内。
    【说明】某航空公司的会员积分系统将其会员划分为:普卡 (Basic)、银卡(Silver)和金卡 (Gold) 三个等级。非会员 (NonMember) 可以申请成为普卡会员。会员的等级根据其一年内累积 的里程数进行调整。描述会员等级调整的状态图如图 5-1 所示。现采用状态 (State) 模式实现上述场景,得到如图 5-2 所示的类图。




    【问题1】(15分)阅读上述说明和C++代码,将应填入 (n) 处的字句写在答题纸的对应栏内。


    答案:
    解析:
    注意:原版的题目应该是Cbasic、CSilve。(1) virtual double travel(int miles,FrequentFlyer* context)=0(2)context->setState(context->Cbasic)(3)context->setState(context->CSilve)(4)context->setState(context->Cbasic)(5)context->setState(context->CSilve)

  • 第22题:

    阅读下列说明和C++代码,将应填入
    (n)
    处的字句写在答题纸的对应栏内。
    【说明】
      某软件公司现欲开发一款飞机飞行模拟系统,该系统主要模拟不同种类飞机的飞行特征与起飞特征。需要模拟的飞机种类及其特征如表5-1所示。表5-1



     为支持将来模拟更多种类的飞机,采用策略设计模式(Strategy)设计的类图如图5-1所示。



    图5-1中,AirCraft为抽象类,描述了抽象的飞机,而类Helicopter、AirPlane、Fighter和Harrier分别描述具体的飞机种类,方法fly()和takeOff()分别表示不同飞机都具有飞行特征和起飞特征;类FlyBehavior与TakeOffBehavior为抽象类,分别用于表示抽象的飞行为与起飞行为;类SubSonicFly与SuperSonicFly分别描述亚音速飞行和超音速飞行的行为;类VerticalTakeOff与LongDistanceTakeOff分别描述垂直起飞与长距离起飞的行为。 【C++ 代码】 #include


    答案:
    解析:
    (1)FlyBehavior*flyBehavior      
    (2)TakeOffBehavior*takeOffBehavior

  • 第23题:

    阅读下列说明和?C++代码,将应填入(n)处的字句写在答题纸的对应栏内。
    【说明】
    阅读下列说明和?Java代码,将应填入?(n)?处的字句写在答题纸的对应栏内。
    【说明】
    某快餐厅主要制作并出售儿童套餐,一般包括主餐(各类比萨)、饮料和玩具,其餐品种
    类可能不同,但其制作过程相同。前台服务员?(Waiter)?调度厨师制作套餐。现采用生成器?(Builder)?模式实现制作过程,得到如图?6-1?所示的类图。






    答案:
    解析: