阅读下列函数说明和C++代码,将应填入(n)处的字句写在答题纸对应栏内。 【说明】 对多个元素的聚合进行遍历访问时,需要依次推移元素,例如对数组通过递增下标的方式,数组下标功能抽象化、一般化的结果就称为迭代器(Iterator)。模式以下程序模拟将书籍(B

admin2014-10-11  36

问题 阅读下列函数说明和C++代码,将应填入(n)处的字句写在答题纸对应栏内。
【说明】
对多个元素的聚合进行遍历访问时,需要依次推移元素,例如对数组通过递增下标的方式,数组下标功能抽象化、一般化的结果就称为迭代器(Iterator)。模式以下程序模拟将书籍(B00k)放到书架(B00kShelf)上并依次输出书名。这样就要涉及到遍历整个书架的过程。使用迭代器Iterator实现。图5.1显示了各个类间的关系。以下是C++语言实现,能够正确编译通过。
【图5一1】
【C++代码】
template
class  Iterator{
public:
    virtual bool hasNext()  =0;
    (2)  obj ect*next()  =0;
};
class B00k{
//省略具体方法和属性
};
class BookShelf(
private:
    vectorbooks:
public:
    BookShelf()(
    }
    B00k*  getBookAt(int  index){
    return&b00ks[index];
    }
    int getLength(){
    return books.size();
    }
    template
    class BookShelfIterator  :  public  (3)  {
    BookShel f  *bookShel f:
    BookShelfIterator(BookShelf  *bookShelf)(
    this一>bookShelf=b00kShelf:
    bool hasNext(){//判断是否还有下一个元素
    if(indexgetLength()){
    object*next(){//取得下一个元素
    return bookShel f一>getBookAt(index++);
    B00kShelf bookShel f:
    //将书籍上架,省略代码
    rterator*it=new Book ShelfIterator(  (4)  );
    while(5){//遍历书架,输出书名
    b00k=  (Book*)it一>next();
    /*访问元素*/

选项

答案(1)Object (2)virtual (3)Iterator (4)&bookShelf (5)it一>hasNext()
解析 Iterator是模板类,空(1)应该填某个类名,其方法next()的返回类型是Object,而Object没有定义,故空(1)应填Object。从next()方法末尾的“=0”可知,该方法为纯虚函数,故空(2)应填virtual。BookShelflterator类继承自Iterator类,要注意的是模板类基类的写法,空(3)应填Iterator。根据构造函数BookShelfIterator(BookShelf*bookShelf)可得,空(4)应填&bookShelf,注意地址符,因形参是BookShelf指针。while循环是遍历书架,输出书名,循环条件是“还有下一记录(书)”,故空(5)应填it一>hasNext0。注意指针写法。
转载请注明原文地址:https://kaotiyun.com/show/diDZ777K
0

相关试题推荐
最新回复(0)
CopyRight © 2024 All Rights Reserved
Processed: 0.017, SQL: 5