问答题

[C++代码] #include <iostream> const OBS_MAXNUM=20;//最多与OfficeDoc对象相关联的DocExplorer对象的个数 (1) ; class DocExplorer{ //关注OfficeDoc公文对象的类 public: DocExplorer( (2) *doc); //构造函数 (3) void update(OfficeDoc *doc)=0;//更新自身状态的函数 //其他相关属性和方法省略 }; class OfficeDoc{ //公文类 private: DocExplorer *myObs[OBS_MAXNUM]; //关注此公文类的DocExplorer类对象指针数组 int index; //与OfficeDoc对象关联的DocExplorer对象的个数 public: OfficeDoe() index=0; } void attach(DocExplorer *o){ //将一DoeExplorer对象与OfficeDoe对象相关联 if(index >=OBS_MAXNUM ||o=NULL)return; for(int loop=0; loop<index; loop++) if(myObs[loop]==o) return; myObs[index]=o; index++; } void detaeh(DocExplorer *o){ //接触某DoeExplorer对象与OfficeDoc对象的关联 if(0==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){//DocExplorer 类对象的构造函数 doc-> (5) ; //将此DocExplorer对象与doc对象相关联 }

【参考答案】

(1) class OfficeDoc (2) OfficeDoc (3) virtual (4) update(thi......

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

问答题
例如:设散列函数为Hash(Key)=Key mod 7,记录的关键字序列为15,14,21,87,97,293,35,24,149,19,63,16,103,77,5,153,145,356,51,68,705,453,建立的散列文件内容如图4-1所示。[图4-1]为简化起见,散列文件的存储单位以内存单元表示。函数InsertToHashTable(int NewElemKey)的功能是:将元素NewEIemKey插入散列桶中,若插入成功则返回0,否则返回-1。采用的散列函数为Hash(NewElemKey)=NewElemKey % P,其中P为设定的基桶数目。函数中使用的预定义符号如下:#define NULLKEY -1 *散列桶的空闲单元标识* #define P 7 *散列文件中基桶的数目* #define ITEMS 3 *基桶和溢出桶的容量* typedef struct BucketNode{ *基桶和溢出桶的类型定义* int KcyData[ITEMS];struct BucketNode *Link;}BUCKET;BUCKET Bucket[P]; *基桶空间定义* [函数]int lnsertToHashTable(int NewElemKey){ *将元素NewElemKey插入散列桶中,若插入成功则返回0,否则返回-1* *设插入第一个元素前基桶的所有KeyData[]、Link域已分别初始化为NULLKEY、NULL* int Index; *基桶编号* int i,k;BUCKET *s,*front,*t;(1) ;for(i=0; i<ITEMS;i++) *在基桶查找空闲单元,若找到则将元素存入* if(Bucket[Index].KeyData[i]=NULLKEY){Bucket[Index].KeyData[i]=NewElemKey; break;}if( (2) ) return 0; *若基桶已满,则在溢出桶中查找空闲单元,若找不到则申请新的溢出桶* (3) ; t=Bucket[Index].Link;if(t!=NULL) { *有溢出桶* while (t!=NULL){for(k=0; k<ITEMS; k++)if(t->KeyData[k]=NULLKEY){ *在溢出桶链表中找到空闲单元* t->KeyData[k]=NewElemKey; break;} *if* front=t;if( (4) )t=t->Link;else break;} *while* } *if* if( (5) ) { *申请新溢出桶并将元素存入* s=(BUCKET*)malloe(sizeof(BUCKET));if(!s) return-1;s->Link=NULL;for(k=0; k<ITEMS; k++)s->KeyData[k]=NULLKEY;s->KeyData[0]=NewElemKey;(6) ;} *if* return 0;} *InsertToHashTable*