试题五(共15分) 阅读以下说明和C++(www.cppentry.com)代码,将应填入_____(n)____
处的字句写在答题纸的对应栏内。 [说明] 在一公文处理系统中,开发者定义了一个公文类OfficeDoc,
其中定义了公文具有的属性和处理公文的相应方法。当公文件的内容或状态发生变化时,关注此OfficeDoc 类对象的相应的DocExplorer
对象都要更新其自身的状态。一个OfficeDoc 对象能够关联一组DocExplorer 对象。当OfficeDoc
对象的内容或状态发生变化时,所有与之相关联的DocExplorer对象都将得到通知,这种应用被称为观察者模式。以下代码写在一个C++(www.cppentry.com)
源文件中,能够正确编译通过。 [C++(www.cppentry.com)代码] #include <iostream> const
OBS_MAXNUM = 20 // 最多与OfficeDoc 对象相关联的DocExplorer
对象的个数 ____(1)____; class DocExploer { //关注OfficeDoc
公文对象的类 public: DocExplorer (____(2)____ *doc); //
构造函数 _____(3)____ void update(OfficeDoc *doc)=0;
//更新自身状态的函数 //其它相关属性和方法省略 } class OfficeDoc{ //
公文类 private: DocExploer *myObs[OBS_MAXNUM]; //关注此公文类的DocExplorer
类对象指针数组 int index; // 与OfficeDoc 对象关联的DocExploer
对象的个数 public: OfficeDoc(){ index=0; } void
attach(DocExploer *o){ //将一DocExploer 对象与OfficeDoc 对象相关联 if (index
>= OBS_MAXNUM || o == NULL) return; for (int loop = 0; loop < index;
loop++) if (myObs[loop] == 0) return; myObs[index] =
o;index++; } void detach(DocExploer *o){ //解除某DocExploer
对象与OfficeDoc 对象的关联 if(o==NULL) return; for(int loop =
0; loop < index; loop++){ if(myObs[loop] == o){ if
(loop <= index-2) myObs[loop] = myObs[index-1]; myObs[index-1] =
NULL; index--; break; } } } private: void
notifyObs(){ // 通知所有的DocExplorer 对象更改自身状态 for(int loop = 0; loop
<index; loop++){ myObs[loop]->____(4)____; //DocExplorer
对象更新自身状态 } } //其它公文类的相关属性和方法
}; DocExplorer::DocExplorer(OfficeDoc *doc){ //DocExploer
类对象的构造函数 doc->____(5)____; // 将此DocExplorer对象与doc 对象相关联 }
|