问答题
使用VC6打开
下的源程序文件modi3.cpp。其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。
(1)完成构造函数的定义,请在注释//********1********后添加适当的语句。
(2)定义类的友元函数fun(),请在注释//********2********后添加适当的语句。
(3)定义类的友元函数main(),请在注释//********3********后添加适当的语句。
(4)补充语句,释放内存。请在注释//********4********后添加适当的语句。
注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。
#include <iostream.h>
class 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->data < t->data; 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"

endl;
cin

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

h->data
【正确答案】
【答案解析】(1)添加语句:TestClass(int d)
(2)添加语句:friend TestClass*fun(TestClass*);
(3)添加语句:friend void main();
(4)添加语句:h=q;
答案考生文件夹
[解析] 本题的功能是将键盘输入的数字建立一个链表。在VC环境下打开程序,根据题干给出的几条功能要求,对程序中给出注释下的内容逐个补全或修改。从已定源程序的main主函数开始入手,可以看出程序通过调用类TestClass和函数fun实现各种输出操作。
(1)题目1要求“完成构造函数的定义”。构造函数是一种特殊的成员函数,它的名字必须与类同名,所以这里的构造函数名字是TestClass。根据构造函数内的“data=d;”语句,知道构造函数TestClass中参数d为int型,即这里补全“TestClass(int d)”。
(2)题目2要求“定义类的友元函数fun()”。在C++中,如果在本类以外的其它地方定义了一个函数,在类体中是用friend对该函数进行声明的,此函数称为本类的友元函数,并且能够调用本类中的成员变量。程序中fun()在类TestClass以外的地方定义的,为了其实现对类TestClass中程序变量的调用,在类TestClass中补全“friend TestClass*fun(TestClass*);”。
(3)题目3要求“定义类的友元函数main()。”同(2),这里补全“friend void main();”。
(4)题目4要求“补充语句,释放内存。”为了防止内存泄漏,在指针使用后要将其释放。第四个标识前面的“deleteh;”语句已经将指针h释放了,所以要释放指针q,只要将其指向h就可以了,即“h=q;”。