问答题 使用VC6打开考生文件夹下的源程序文件modi3.cpp。其中定义的类并不完整,按要求完成列操作,将类的定义补充完整,实现以下功能: (1)完成CBook类构造函数,对整型变量ID和作者Author进行赋值,请在注释∥********1********后添加适当的语句。 (2)完成类CBooks的析构函数,释放申请的内存,请在注释∥********2********后添加适当的语句。 (3)完成类CBooks的AddBookMember函数,请在注释∥********3********后添加适当的语句。 (4)完成CBooks类,用于由书的ID检索到作者的函数char*GetBookAuthor(int nlD),请在注释∥********4********后添加适当的语句。 (5)程序的输出结果为: Tom Harry 注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。 #include #include Class CBook { public: int ID; char Author[32]; public: CBook(int ID Number,char*Author Name) { thiS一>ID=ID Number; ∥********1******** } }; C1ass CBooks { private: Class NOde { public: Node*next; CBook*book; }*m pBook; public: CBooks() { m pBook=NULL: } ~CBooks() { ∥********2******** while() { Node*P =m pBook一>next; delete m pBook 一>book; delete m pBook; m—pBook=P; } } int AddBoo kMenber(int nID,char*Author) { Node*p=m—pBook; Node*q=NULL; ∥********3******** while() { if f nID==P一> book一>ID) { return 0; } q=p; P=p一>next; } if(P==NULL) { P=new Node; P一>next=NULL; P—>book= new CBook(nID,Author); } if(q=NULL) { m pBook=P; } else { q一>next=p; } return 1; } char*GetBookAuthor(int nID) { Node*p=m pBook; ∥********4******** while() { if(P一>book一>ID==nID) { return P一> book一>AUthor; } P=P一>next; } return 0; } }; int main() { CBooks booksl; booksl.AddBookMenber (1,“Tom”); books 1.AddBookMenber (3,“Lee”); books 1.AddBookMenber (4,“Lily”); bookS 1.AddBookMenber(5,“Harry”); cout<
【正确答案】正确答案:(1) 添加语句: strcpy(Author,Author—Name); (2)将“while()”补充完整为:while(m—pBook!=NULL) (3)将“while()”补充完整为:while(P!:NULL) (4)将“while()”补充完整为:while(p!=NULL)
【答案解析】解析:程序当中定义了CBook类和CBooks类,CBook类描述书的基本信息,包含ID和Author数组两个成员变量,CBooks类描述由Node对象组成的链表,每个Node对象包含指向CBook对象的指针和下一个Node对象的指针。第一个Node对象的next指针指向第二个Node对象,同样第二个Node对象的next指针指向第三个Node对象,如此形成一个链表结构。成员函数AddBookMenber(int nlD,char*Author)实现向链表中添加一个Node节点,成员函数GetBookAuthor(int nID)返回某个Node节点的CBook对象的ID为nlD的CBook对象的Author数组名。