面向对象程序设计习题.doc_第1页
面向对象程序设计习题.doc_第2页
面向对象程序设计习题.doc_第3页
面向对象程序设计习题.doc_第4页
面向对象程序设计习题.doc_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

选择题 1. 程序中主函数的名字为( )。 A. main B. MAIN C. Main D. 任意标识符 2. 为了提高程序的运行速度,可将不太复杂的功能用函数实现,此函数应选择( )。 A. 内联函数 B.重载函数 C.递归函数 D.函数模板 3. 将两个字符串连接起来组成一个字符串时,选用( )函数。 A. strlen() B. strcap() C. strcat() D. strcmp()4. 对于任一个类,用户所能定义的析构函数的个数至多为( )。 A. 0 B. 1 C. 2 D. 任意个 5. 对类中引用成员的初始化是通过构造函数中给出的( )实现的。 A. 函数体 B. 参数表 C. 初始化表 D. 初始化表或函数体6. 假定AB为一个类,则执行“AB x(a,5);”语句时将自动调用该类的( )。 A. 带参构造函数 B. 无参构造函数 C. 拷贝构造函数 D. 赋值重载函数7. 对于任一个类,用户所能定义的析构函数的个数至多为( )。 A. 0 B. 1 C. 2 D. 任意个8. 用new运算符创建一维整型数组的正确语句是_。 A. int *p=new a10; B.int *p=new float10; C. int *p=new int10; D.int *p=new int5=1,2,3,4,5 9. 假定有定义“int b10; int *pb;”,则不正确的赋值语句为( )。 A. pb=b; B. pb=&b0; C. pb=new int; D. pb=b5; 10. 程序中主函数的名字为( )。 A. main B. MAIN C. Main D. 任意标识符 11. 为了提高程序的运行速度,可将不太复杂的功能用函数实现,此函数应选择( )。 A. 内联函数 B.重载函数 C.递归函数 D.函数模板 12. 将两个字符串连接起来组成一个字符串时,选用( )函数。 A. strlen() B. strcap() C. strcat() D. strcmp() 13. 用new运算符创建一维整型数组的正确语句是_。 A. int *p=new a10; B.int *p=new float10; C. int *p=new int10; D.int *p=new int5=1,2,3,4,5 14. 假定有定义“int b10; int *pb;”,则不正确的赋值语句为( )。 A. pb=b; B. pb=&b0; C. pb=new int; D. pb=b5; 15. 假定AA为一个类,a为该类公有的数据成员,x为该类的一个对象,则访问x对象中数据成员a的格式为( )。 A. x(a) B. xa C. x-a D. x.a 16. 假定AB为一个类,则执行“AB x(a,5);”语句时将自动调用该类的( )。 A. 带参构造函数 B. 无参构造函数 C. 拷贝构造函数 D. 赋值重载函数 17. 对于任一个类,用户所能定义的析构函数的个数至多为( )。 A. 0 B. 1 C. 2 D. 任意个 18. 对类中引用成员的初始化是通过构造函数中给出的( )实现的。 A. 函数体 B. 参数表 C. 初始化表 D. 初始化表或函数体 19. 如果表达式a=b中的“=”是作为普通函数重载的运算符,若采用运算符函数调用格式,则可表示为( )。 A. a.operator=(b) B. b.operator=(a) C. operator=(a,b) D. operator=(b,a)填空题1. 若只需要通过一个成员函数读取其数据成员的值,而不需要修改它们,则应在函数头的后面加上_关键字;若只需要读取引用参数的值,不需要对其修改,则应在该参数说明的开始使用_关键字。2假定一个类对象数组为AN,当定义该数组时,将自动调用该类的无参构造函数的次数为_次,当离开它的作用域时,将自动调用该类析构函数的次数为_次。3假定AB为一个类,则类定义体中的“AB(AB& x);”语句为该类_的原型语句,而“operator=(AB& x);”为该类_的原型语句。4. 在定义一个派生类时,使用_关键字表示为私有继承,使用_关键字表示为公有继承。5. 元素类型为double的二维数组a46共有_个元素,共占用_字节的存储空间。6. 假定对二维数组a34进行初始化的数据为3,5,6,2,8,7,则a11和a23分别被初始化为_和_。7. 假定p为指向二维数组int d46的指针,则p的类型为_,其中一个元素dij表示成指针访问方式为_。8假定一个类对象数组为AN,当定义该数组时,将自动调用该类的无参构造函数的次数为_次,当离开它的作用域时,将自动调用该类析构函数的次数为_次。9. 已知一维数组类ARRAY的定义如下,ARRAY与普通一维数组区别是:其重载的运算符 要对下标是否越界进行检查。 class ARRAY int *v; /指向存放数组数据的空间 int s; /数组大小 public: ARRAY(int a, int n); ARRAY()delete v; int size() return s; int& operator(int n); ; _(1)_ operator(int n) / 的运算符成员函数定义 if(n0 | _(2)_) cerr下标越界!; exit(1); return _(3)_; (1) (2) (3)10. 常数-4.205和6.7E-9分别具有_和_位有效数字。 11. 元素类型为double的二维数组a46共有_个元素,共占用_字节的存储空间。 12. 假定对二维数组a34进行初始化的数据为3,5,6,2,8,7,则a11和a23分别被初始化为_和_。 13. 假定p为指向二维数组int d46的指针,则p的类型为_,其中一个元素dij表示成指针访问方式为_。 14. 已知变量a定义为“int a=5;”,要使ra成为a的引用,则ra应定义为_,要使rb指向a,则rb应定义为_。 15. 若只需要通过一个成员函数读取其数据成员的值,而不需要修改它们,则应在函数头的后面加上_关键字;若只需要读取引用参数的值,不需要对其修改,则应在该参数说明的开始使用_关键字。 16假定一个类对象数组为AN,当定义该数组时,将自动调用该类的无参构造函数的次数为_次,当离开它的作用域时,将自动调用该类析构函数的次数为_次。 17假定AB为一个类,则类定义体中的“AB(AB& x);”语句为该类_的原型语句,而“operator=(AB& x);”为该类_的原型语句。 18. 在定义一个派生类时,使用_关键字表示为私有继承,使用_关键字表示为公有继承。 19. 重载一个运算符时,该运算符的_、_以及操作符的个数不允许改变。程序题1实现一个类A,在A中有两个私有的整型变量a和b,定义构造函数对a和b进行初始化,并实现成员函数geta()取得a的值和getb()取b的值。实现类B从A继承,覆盖geta(),使其返回a的2倍。答案:#includeusing namespace std;class Aint a;int b;public:A(int m,int n):a(m),b(n) int geta() return a; int getb() return b; ;class B :public Apublic:B(int m,int n):A(m,n) int geta() return A:geta()*2; ;void main()B b(2,2);b.geta();coutb.geta()=a&*(str+i)x2?x2:x1;floatmin(floatx1,floatx2,floatx3)returnmin(min(x1,x2),x3);5.实现一个Point类(数据成员为一个点在两维直角坐标系内的坐标);派生一个圆Circle类;要求圆能计算周长,能够画出一个圆。6.定义一个复数类Complex,要求复数类重载“*”;能够将复数对象转换为一个整数。#includeusing namespace std;class complexpublic:complex(int r=0,int i=0,int me=0)real=r;imag=i;m=me;complex operator * (complex c2);void display();void display1();private:int real;int imag;int m;complex complex:operator *(complex c2)complex c;c.real=c2.real*real;c.imag=c2.imag*imag;c.m=c.real-c.imag;return complex(c.real,c.imag,c.m);void complex:display() cout”(“real”,”imag”)”endl; void complex:display1() coutmendl; void main() complex c1(5,4),c2(2,10),c3;cout”c1=”; c1.display();cout”c2=”; c2.display();c3=c1*c2;coutitem;front=front-nextItem;deletepFront;returnretVal;/模板类Queue的函数成员add()的实现templatevoidQueue:add(constType&newItem)QueueItem*pNew=newQueueItem;pNew-item=newItem;_(D)_;if(front=NULL)front=back=pNew;elseback-nextItem=pNew;_(E)_;templateQueue:Queue()QueueItem*p= front,*q;while(p!=NULL)q=p-nextItem;deletep;p=q;问题1:程序中有几处填空,将它们完成。(A)back(NULL)(B)front= NULL 或 back=NULL(C)pFront=front(D)pNew-nextItem=NULL(E)back=pNew问题2:()题中程序第1,2行为什么要说明一下类模板Queue?如果没有这两行语句,程序还正确吗?答:不正确。因为在类QueueItem模板类的定义中用到了模板类Queue,而此时Queue还没有定义,所以要先声明一下,告诉编译程序Queue是一个模板类,它将在程序的其他地方定义。如果没有这个说明,编译程序就不知道标识符Queue代表什么样的含义了。问题3:程序第22,23行各有一个const,它们各自表示什么含义:答:第22行的const修饰的是函数的参数,表示在这个函数体中不能改它所修饰的参数所对应的实际参数的值。第23行的const修饰的是模板类Queue的成员函数is_empty(),它表示在函数is_empty()的函数体中不能改变任何数据成员的值。问题4:程序中模板类Queue的析构函数主要做了什么事情?为什么要这么做?答:析构函数中主要是释放链表中存放的各个节点的空间。因为Queue对象在其生存期间可能加入了很多节点,从堆中申请了一些内存空间,这些空间应该随着对象的消亡而释放掉,所以需要在析构函数中来释放这些空间。问题5:下面的程序使用了queue.h文件中定义的类模板,说明程序中哪些定义队列对象的语句是不正确的,哪些是正确的。#include“queue.h”voidmain()Queueq1; / 1Queueq2; / 2Queueq3(100); / 3Queueq4100; / 4Queue*q5=newQueue; / 5/.deleteq5;语句号12345错对错对对6下面的程序定义了三个类,Base是图形对象基类,Point表示屏幕上的一个点,ColorPoint表示带颜色的点,基类中利用posx和posy记录图形对象的位置。先阅读三个类的定义,然后回答后面的问题(假定程序中调用的SetPixel()和SetColor()是系统函数库中预定义的函数,可以直接使用)。/*/classBasepublic:Base():posz(0),posy(0);Base(intpx,intpy);posz(px),posy(py);virtualvoiddraw()=0;protected:intposx,posy;/图形对象的位置;classPoint:publicBasepublic:Point(intpx,intpy):Base(px,py)voiddraw()SetPixel(posx,posy);classColorpoint:publicPointpublic;ColorPoint(intpx,intpy):Point(px,py)color=0;ColorPoint(intpx,intpy,intc):Point(px,py),color(c)voiddraw()SetColor(color);Point:draw();protected:intcolor;/*/问题下面的主程序使用了上面定义的三个类,程序中定义对象语句哪些是正确的,哪些是错误的?voidmain()Baseb;/1Pointp1;/2Pointp2(3,4);/3ColorPointcp1;/4ColorPointcp2(5,6);/5ColorPointcp3(7,8,1);/6答:问题:将类ColorPoint的两个构造函数合并为一个构造函数,写出该函数的实现(提示:使用函数的默认参数)。答:合并后的构造函数定义为:ColorPoint( int px , int py , int c=0 ):Point( px , py ) , color( c ) 问题:下面的程序段Base*p;p=newColorPoint(5,6);pdraw()运行后将调用:(A)Base:draw()(B)Point:draw()(C)ColorPoint:draw()(D):draw()答:运行后将调用 (C),即ColorPoint:draw()一、程序题:1实现一个类A,在A中有两个私有的整型变量a和b,定义构造函数对a和b进行初始化,并实现成员函数geta()取得a的值和getb()取b的值。实现类B从A继承,覆盖geta(),使其返回a的2倍。答案:#includeusing namespace std;class Aint a;int b;public:A(int m,int n):a(m),b(n) int geta() return a; int getb() return b; ;class B :public Apublic:B(int m,int n):A(m,n) int geta() return A:geta()*2; ;void main()B b(2,2);b.geta();coutb.geta()=a&*(str+i)x2?x2:x1;floatmin(floatx1,floatx2,floatx3)returnmin(min(x1,x2),x3); 理解问答题,写出前三小题的程序运行结果和指出后两小题的程序(或函数)所能实现的功能。 1. #include const int B=2; void main() int p=1,s=1; while(s50) p*=B; s+=p; couts=sendl; 2. #include class CE private: int a,b; int getmin() return (ab? a:b); public: int c; void SetValue(int x1,int x2, int x3) a=x1; b=x2; c=x3; int GetMin(); ; int CE:GetMin() int d=getmin(); return (dSetValue(x+y,y-z,10); coutGetMin()endl; CE a=*ep; couta.GetMin()*3+15endl; 运行结果: 3. #include class A int a10; int n; public: A(int aa, int nn): n(nn) for(int i=0; in; i+) ai=aai; int Get(int i) return ai; int SumA(int nn) int s=0; for(int j=0; jnn; j+) s+=aj; return s; ; void main() int a=2,5,8,10,15,20; A x(a,4); A y(a,6); int d=1; for(int i=0; i4; i+) d*=x.Get(i); int f=y.SumA(5); coutd=dendl; coutf=fendl; 运行结果: 4. #include #include #include const int N=10; int ff(int x, int y) int z; coutx+yz; if(x+y=z) return 1; else return 0; void main() int a,b,c=0; srand(time(0); /初始化随机数序列 for(int i=0;iN;i+) a=rand()%20+1; /rand()函数产生0-32767之间的一个随机数 b=rand()%20+1; c+=ff(a,b); cout得分:c*10endl; 程序功能: 5. char *f(char *s) int n=strlen(s); char* r=new charn+1; for(int i=0; i=a & sims) coutError!endl; exit(1); MS=ms; n=nn; a=new intMS; for(int i=0; in; i+) ai=aai; int CompareBig(AA& b); /比较*this与b的大小,从前向后按两数组 /中的对应元素比较,若*this中元素值大则返回1,若b中 /元素值大则返回-1,若相等则继续比较下一个元素,直到 /一个数组中无元素比较,此时若两者的n值相同则返回0, /否则若*this中的n值大则返回1,若b中的n值大则返回-1。 ;程序题:1定义一个图形Shape类并用继承方法定义圆形Circle类.答案:classshape public: shape(); ;classcircle:publicshapepublic:circle(); 2.实现一个Point类(数据成员为一个点在两维直角坐标系内的坐标);派生一个圆Circle类;要求圆能计算周长,能够画出一个圆。3.定义一个复数类Complex,要求复数类重载“*”;能够将复数对象转换为一个整数。#includeusing namespace std;class complexpublic:complex(int r=0,int i=0,int me=0)real=r;imag=i;m=me;complex operator * (complex c2);void display();void display1();private:int real;int imag;int m;complex complex:operator *(complex c2)complex c;c.real=c2.real*real;c.imag=c2.imag*imag;c.m=c.real-c.imag;return complex(c.real,c.imag,c.m);void complex:display() cout”(“real”,”imag”)”endl; void complex:display1() coutmendl; void main() complex c1(5,4),c2(2,10),c3;cout”c1=”; c1.display();cout”c2=”; c2.display();c3=c1*c2;coutitem;front=front-nextItem;deletepFront;returnretVal;/模板类Queue的函数成员add()的实现templatevoidQueue:add(constType&newItem)QueueItem*pNew=newQueueItem;pNew-item=newItem;_(D)_;if(front=NULL)front=back=pNew;elseback-nextItem=pNew;_(E)_;templateQueue:Queue()QueueItem*p= front,*q;while(p!=NULL)q=p-nextItem;deletep;p=q;问题1:程序中有几处填空,将它们完成。(A)back(NULL)(B)front= NULL 或 back=NULL(C)pFront=front(D)pNew-nextItem=NULL(E)back=pNew问题2:()题中程序第1,2行为什么要说明一下类模板Queue?如果没有这两行语句,程序还正确吗?答:不正确。因为在类QueueItem模板类的定义中用到了模板类Queue,而此时Queue还没有定义,所以要先声明一下,告诉编译程序Queue是一个模板类,它将在程序的其他地方定义。如果没有这个说明,编译程序就不知道标识符Queue代表什么样的含义了。问题3:程序第22,23行各有一个const,它们各自表示什么含义:答:第22行的const修饰的是函数的参数,表示在这个函数体中不能改它所修饰的参数所对应的实际参数的值。第23行的const修饰的是模板类Queue的成员函数is_empty(),它表示在函数is_empty()的函数体中不能改变任何数据成员的值。问题4:程序中模板类Queue的析构函数主要做了什么事情?为什么要这么做?答:析构函数中主要是释放链表中存放的各个节点的空间。因为Queue对象在其生存期间可能加入了很多节点,从堆中申请了一些内存空间,这些空间应该随着对象的消亡而释放掉,所以需要在析构函数中来释放这些空间。问题5:下面的程序使用了queue.h文件中定义的类模板,说明程序中哪些定义队列对象的语句是不正确的,哪些是正确的。#include“queue.h”voidmain()Queueq1; / 1Queueq2; / 2Queueq3(100); / 3Queueq4100; / 4Queue*q5=newQueue; / 5/.deleteq5;语句号12345错对错对对6下面的程序定义了三个类,Base是图形对象基类,Point表示屏幕上的一个点,ColorPoint表示带颜色的点,基类中利用posx和posy记录图形对象的位置。先阅读三个类的定义,然后回答后面的问题(假定程序中调用的SetPixel()和SetColor()是系统函数库中预定义的函数,可以直接使用)。/*/classBasepublic:Base():posz(0),posy(0);Base(intpx,intpy);posz(px),posy(py);virtualvoiddraw()=0;protected:intposx,posy;/图形对象的位置;classPoint:publicBasepublic:Point(intpx,intpy):Base(px,py)voiddraw()SetPixel(posx,posy);classColorp

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论