1、第九章综合练习题请提交本文档!姓名 学号一、选择题(20分)1. 已知f1(int)是类A的公有成员函数,p是指向成员函数f1()的指针(int (A:*p)(int);)下列赋值语句中,正确的是( B )A. p=f1;B. p=A:f1;C. p=A:f1()D. p=f1();2. 设有下列说明。如果要给类Sample的对象s中的成员数据m赋值为5,正确的语句是( C )#include class Samplepublic:int m;Sample s;int *p=&s.m;A. s.p=5;B. s-p=5;C. *p=5;D. *s.p=53. 下列定义中,Sample是一个类,
2、( B )是定义指向对象数组的指针p。 A. Sample *p5B. Sample (*p)5C. (Sample *) p5D. Sample *p4. this指针是分配给被调用的成员函数的指针,*this表示( D )。A. 成员函数的形参B. 对象所调用的成员函数C. 成员函数种的数据成员D. 调用成员函数的对象5. 下列有关类和对象的说法中,正确的是( C )A. 类和对象没有区别B. 要为类和对象分配存储空间C. 对象是类的实例,为对象分配存储空间而不为类分配存储空间D. 类是对象的实例,为类分配存储空间而不为对象分配存储空间二、阅读程序题(40分)1. 执行以下程序后,其输出结
3、果是( 102+202i )#include class Complexpublic:float Real,Image;Complex *Add();void Print()coutReal+ImageiAdd();c1.Print();2. 执行以下程序后,输出的第一行是( fun1:7 ),第二行是( fun2:15 )。#include class Apublic:int x;void fun1(int j)x+=j;coutfun1:xendl;void fun2(int j)x+=j;coutfun2:xendl;void main(void)A c1=2,c2=5;void (A:
4、*pf)(int);pf=A:fun1;(c1.*pf)(5);pf=A:fun2;(c2.*pf)(10);三、完善程序题(20分)下列程序中类T的定义包含两个私有成员数据p1和p2,共有成员函数void Init(char *s1,char * s2)的功能是将s1和s2所指向的字符串分别送给p1和p2,成员函数void CopyT(T & t)的功能是将当前对象(指调用该成员函数的对象)的私有成员p1和p2复制给对象t的对应成员变量,成员函数void FreeT()的功能是释放p1和p2的内存空间。请完善下面的程序。#include #include class Tchar *p1,*p
5、2;public:void Init(char *s1, char*s2);void Print()coutp1=p1endlp2=p2endl;void CopyT(T & t) t.Init(p1,p2);void FreeT(void)if(p1) delete p1 ;if(p2) delete p2;void T:Init (char *s1, char *s2)p1=new char strlen(s1)+1;p2=new char strlen(s2)+1;strcpy(p1,s1);strcpy(p2,s2);void main(void)T t1,t2;t1.Init(abc
6、,def);t1.CopyT( t2 );t2.Print();t1.FreeT();t2.FreeT();四、程序设计题(20分)下列是用链表结构实现简单的栈的程序,请补充类stack定义中的Put(int item)和Get()两个成员函数,这两个成员函数的功能分别是将数据入栈和出栈,数据的进出栈按先进后出的原则。#include struct Nodeint a;Node * next;class stackpublic:Node * head;void Put(int item);/将数据item插入到栈中int Get();/从栈中取一个数据void Print();/输出栈中的数据
7、void Destroy();/释放链表的存储空间;void stack:Put(int item)Node *p=head,*pend;if(head=NULL)p=new Node;p-a=item;p-next=NULL;head=p;elsewhile(p-next!=NULL)p=p-next;pend=p;p=new Node;p-a=item;p-next=NULL;pend-next=p;int stack:Get()Node *p1=head,*p2=head;int item;if(head)while(p2-next!=NULL)p1=p2;p2=p2-next;item
8、=p2-a;p1-next=NULL;delete p2;return item;else return 0;void stack:Print()Node *p=head;if(head)while(p)coutanext;coutendl;else coutnext;delete p1;void main(void)stack st=0;st.Put(10);st.Put(12);st.Put(14);cout现在栈中的数据项是:endl;st.Print();cout现在出栈的数据是:st.Get()endl;cout现在栈中的数据项是:endl;st.Print();cout现在出栈的数据是:st.Get()endl;cout现在栈中的数据项是:endl;st.Print();st.Destroy();
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1