问答题 阅读下列说明和C++代码,在 (n) 处填入适当的字句。
[说明]
已知某类库开发商提供了一套类库,类库中定义了Application类和Document类,它们之间的关系如图10.29所示,其中,Application类表示应用程序自身,而Document类则表示应用程序打开的文档。Application类负责打开一个已有的以外部形式存储的文档,如一个文件,一旦从该文件中读出信息后,它就由一个Document对象表示。
当开发一个具体的应用程序时,开发者需要分别创建自己的Application和Document子类,例如图10.29中的类MyApplication和类MyDocument,并分别实现Application和Document类中的某些方法。
【正确答案】(1) Document* (2) aDocument
(3) !canOpenDocument(docName) (4) Document*
(5) docreateDocument() (6) adoc->open(docName)
(7) adoc->read(docName) (8) addDocument(adoc)
【答案解析】[分析] 本题考查的是面向对象编程,题目中的类结构实际上是一个创建型的设计模式,如果对此设计模式了解,并了解基本语法,解题是比较容易的。程序解释如下。
vector<(1) Document*> docs;/*文档对象集合*//*vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。vector是一个能够存放任意类型的动态数组,能够增加和压缩数据,vector属于std命名域的,因此需要通过命名限定。由Application类中的公有函数void addDocument(Document*aDocument)将文档对象添加到文档对象集合中可知此处数据类型是Document。*/bool canOpenDocument (string docName){
/*判断是否可以打开指定文档,返回真值时表示可以打开,返回假值表示不可打开,此处代码省略*/
}
void addDocument(Document *aDocument){
/*将文档对象添加到文档对象集合中*/
docs.push_back((2)aDocument);/*实现在尾部加入一个数据,由函数addDocument()的参数可知将文档对象aDocument加入到文档对象集合docs中。*/
}
virtual Document*doCreateDocument() =0; /*创建一个文档对象*/
void openDocument(string docName){/*打开文档*/
if((3)!canOpenDocument( docName))( /*由输出语句以及该函数的功能是打开文档可知if语句的判定条件为当文档不能打开时执行cout<<"文档无法打开!"<<endl;再由Application类的公有函数bool canOpenDocument (string docName)判断是否可以打开指定文档, 返回真值时表示可以打开,返回假值表示不可打开可知此处应填!canOpenDocument (docName)。*/
cout<<"文档无法打开!"<<endl;
return;
}
(4) Document* adoc=(5)docreat eDocument();//要对文档进行操作就要创建一个文档对象
(6) adoc->open (docName); //通过文档对象打开文档
(7) adoc->read (docName); //通过文档对象读取文档信息
(8) addDocument(adoc); //将文档对象加入到Application的文档对象集合中
}
};