问答题 使用VC6打开考生文件夹下的源程序文件modi3.cpp。其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。 (1)完成构造函数的定义,请在注释∥********1********后添加适当的语句。 (2)定义类的友元函数fun(),请在注释∥********2********后添加适当的语句。 (3)定义类的友元函数main(),请在注释∥********3********后添加适当的语句。 (4)补充语句,释放内存。请在注释∥********4********后添加适当的语句。 注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。 #include(iostream.h> C1ass TestClass { public: ∥********1******** { data=d; next=NULL; } void SetNext(TestClass*P) { next=P ; } private: int data; TestClass*next; ∥********2******** ∥********3******** }; TestClass*fun(TestClass*h) { TestClass *t,*s,*u,*v; S=h一>next: h一>next=NULL; while(s!=NULL) { for(t=s,v=h;v!=NULL &&V一>datadata;U=v,V= v->next); s=s一>next, if(v==h) h=t; else U一>next=V; t一>next=v; } return h; } void main() { TestClass*h=NULL; TestClass*q=NULL; do { int data; cout<<“please input a number,and end with 0”<>data; if(data==0)break; TestClass*P = new TestClasS(data); if(h==NULL) { h=q=P; } else { q一>SetNext(P); q=P; } }while(1); h=fun(h); for(; h!=NULL ;) { q=h一>next; cout<data<<””<
【正确答案】正确答案:(1)添加语句:TestClass(intd) (2)添加语句:friend TestC3.ass*fun(TestClass*); (3)添加语句:friend void mein(); (4)添加语句:h=q;
【答案解析】解析:本题的功能是将键盘输入的数字建立一个链表。在VC环境下打开程序,根据题干给出的几条功能要求,对程序中给出注释下的内容逐个补全或修改。从已定源程序的main主函数开始入手,可以看出程序通过调用类’l~estClass和函数fun实现各种输出操作。 【解题思路】 (1)题目1要求“完成构造函数的定义”。构造函数是一种特殊的成员函数,它的名字必须与类同名,所以这里的构造函数名字是TestClass。根据构造函数内的“data=d;"语句,知道构造函数TestClass中参数d为int型,即这里补全“TestClass(intd)”。 (2)题目2要求“定义类的友元函数fun()”。在C++中,如果在本类以外的其它地方定义了一个函数,在类体中是用friend对该函数进行声明的,此函数称为本类的友元函数,并且能够调用本类中的成员变量。程序中fun()在类TestClass以外的地方定义的,为了其实现对类TestClass中程序变量的调用,在类TestClass中补全“friend TestClass*fun(TestClass*);”。 (3)题目3要求“定义类的友元函数main()。”同(2),这里补全“friend void main();”。 (4)题目4要求“补充语句,释放内存。”为了防止内存泄漏,在指针使用后要将其释放。第四个标识前面的“delete h;”语句已经将指针h释放了,所以要释放指针q,只要将其指向h就可以了,即“h=q;”。