2005下半年高程考试 下午第五题

试题五(共15分)
  阅读以下说明和C++代码,将应填入_____(n)____ 处的字句写在答题纸的对应栏内。
[说明]
  在一公文处理系统中,开发者定义了一个公文类OfficeDoc, 其中定义了公文具有的属性和处理公文的相应方法。当公文件的内容或状态发生变化时,关注此OfficeDoc 类对象的相应的DocExplorer 对象都要更新其自身的状态。一个OfficeDoc 对象能够关联一组DocExplorer 对象。当OfficeDoc 对象的内容或状态发生变化时,所有与之相关联的DocExplorer对象都将得到通知,这种应用被称为观察者模式。以下代码写在一个C++ 源文件中,能够正确编译通过。
[C++代码]
  #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 对象相关联
   }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值