问答题

[C代码] #include <stdio.h> #define OBS_MAXNUM 20 /*一个OfficeDoc变量最多能够关联的*/ /*DoeExplorer变量的个数*/ typedef void( (1) )(struct OfficeDoc*,street DocExplorer*); struct DocExplorer{ func update;/* DocExplorer结构采用的更新函数*/ /*其他的结构字段省略*/ }; struct OfficeDoc{ (2) myObs[OBS_MAXNUM]; /*存储所有与OfficeDoc相关联的DoeExplorer结构指针*/ int index;/*与OfficeDoc结构变量相关联的DocExplorer结构变量的个数*/ }; void attach(struet OfficeDoc *doc, struet DocExplorer *ob){ /*关联Obersver结构ob与OfficeDoe结构doc*/ int loop=0; if(doc->index >=OBS_MAXNUM || ob==NULL) return; for(loop=0; loop <doc->index; loop++) if(doc->myObs[loop]==ob)return; doc->myObs[doe->index]=ob; doc->index++; ) void detach(struct OfficeDoc *doc, struct DocExplorer *ob){ /*解除doc结构与ob结构间的关系*/ int loop; if(ob==NULL)return; for(loop=0; loop <doc->index; loop6++){ if(doc->myObs[loop]==ob){ if(loop<=doc->index-2) doe->myObs[loop]=doc->myObs[ (3) ]; doc->myObs[doe->indox-1]=NULL; doe->index--; break; } } } void updatel(struct OfficeDoc *doc,struct DocExplorer *ob){ /*更新ob结构的值,更新代码省略*/ } void update2(stmct OfficeDoc *doc, struct DocExplorer *ob){ /*更新ob结构的值,更新代码省略*/ } void notifyObs(struet OfficeDoc *doc){ /*当doc结构的值发生变化时,通知与之关联的所有DocExplorer结构变量*/ int loop; for(loop=0; loop <doc->index; loop++){ (doc->myObs[loop])->update( (4) ); } } void main(){ stmct OfficeDoc doc;/*定义一OfficeDoc变量*/ struct DocExplorer explorer1, explorer2;/*定义两个DocExplorer变量*/ /*初始化与OfficeDoc变量相关的DocExplorer变量个数为0*/ doc.index=0; explorer1.update=update1;/*设置explorer1变量的更新函数*/ explorer2.update=update2;/*设置explorer2变量的更新函数*/ attaeh(&doc,&explorer1);/*关联explorer1与doc对象*/ attach(&doc,&explorer2);/*关联explorer2与doc对象*/ /*其他代码省略*/ (5) ;/*通知与OfficeDoc相关的所有DocExplorer变量*/ return; }

【参考答案】

(1) *func (2) struct DocExplorer* (3) doc->index-1,或等价形式 (4)......

(↓↓↓ 点击下方‘点击查看答案’看完整答案 ↓↓↓)
热门 试题