2022年面向对象程序设计习题 .pdf
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《2022年面向对象程序设计习题 .pdf》由会员分享,可在线阅读,更多相关《2022年面向对象程序设计习题 .pdf(35页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、选择题 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. 参数
2、表 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 *
3、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.
4、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; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 35 页 - - - - - - - - - 15.
5、假定 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. 如果
6、表达式 a=b中的“ =”是作为普通函数重载的运算符,若采用运算符函数调用格式,则可表示为()。 A. a.operator=(b) B. b.operator=(a) C. operator=(a,b) D. operator=(b,a) 填空题1. 若只需要通过一个成员函数读取其数据成员的值,而不需要修改它们,则应在函数头的后面加上 _关键字;若只需要读取引用参数的值,不需要对其修改,则应在该参数说明的开始使用_ 关键字。2假定一个类对象数组为AN ,当定义该数组时,将自动调用该类的无参构造函数的次数为 _次,当离开它的作用域时,将自动调用该类析构函数的次数为 _次。3 假 定AB 为 一
7、 个 类 , 则 类 定 义 体 中 的 “ 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、 。8假定一个类对象数组为AN ,当定义该数组时,将自动调用该类的无参构造函数的次数为 _次,当离开它的作用域时,将自动调用该类析构函名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 35 页 - - - - - - - - - 数的次数为 _次。9. 已知一维数组类ARRAY 的定义如下, ARRAY 与普通一维数组区别是:其重载的运算符 要对下标是否越界进行检查。 class ARRAY int *v; /指向存放数组数据的空间 int s; /数组大小 public:
9、 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,则a
10、11和 a23分别被初始化为 _和_。 13. 假定 p 为指向二维数组int d46的指针,则 p 的类型为 _,其中一个元素 dij表示成指针访问方式为 _ 。 14. 已知变量 a 定义为“ int a=5;”,要使 ra 成为 a 的引用,则 ra 应定义为_ ,要使 rb 指向 a,则 r b 应定义为 _ 。 15. 若只需要通过一个成员函数读取其数据成员的值,而不需要修改它们,则应在函数头的后面加上 _关键字;若只需要读取引用参数的值,不需要对其修改,则应在该参数说明的开始使用_ 关键字。16假定一个类对象数组为AN,当定义该数组时,将自动调用该类的无参构造函数的次数为 _次,当
11、离开它的作用域时,将自动调用该类析构函数的次数为 _次。 17 假 定AB 为 一 个 类 , 则 类 定 义 体 中 的 “ AB(AB& x); ” 语 句 为 该 类_的 原 型 语 句 , 而 “ operator=(AB& x);” 为 该 类名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 35 页 - - - - - - - - - _ 的原型语句。 18. 在定义一个派生类时,使用_关键字表示为私有继承,使用_ 关键字表示为公有继承。 19. 重载一个运算符
12、时,该运算符的_、_ 以及操作符的个数不允许改变。程序题1实现一个类 A,在 A中有两个私有的整型变量a 和 b,定义构造函数对 a 和 b进行初始化,并实现成员函数geta()取得 a 的值和 getb ()取 b 的值。实现类 B从 A继承,覆盖 geta (),使其返回a 的 2 倍。答案:#include using namespace std; class A int a; int b; public: A(int m,int n):a(m),b(n) int geta() return a; int getb() return b; ; class B :public A publ
13、ic: 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; float min(float x1, float x2, float x3) return min( min(x1, x2), x3); 5. 实现一个 Point 类(数据成员为一个点在两维直角坐标系内的坐标);派生一个圆 Circle类;要求圆能计算周长,能够画出一个圆。6. 定义一个复数类 Complex,要求复数类重载“ *”;能够将复数对象
14、转换为一个整数。#includeusing namespace std; class complex public: 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; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 35 页 - - - - - -
15、- - - 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
16、; cout”c1=”; c1.display(); cout”c2=”; c2.display(); c3=c1*c2; coutitem; front = front-nextItem; delete pFront; return retVal; / 模板类 Queue的函数成员 add() 的实现template void Queue:add(const Type & newItem) QueueItem *pNew = new QueueItem; pNew-item = newItem; _(D)_; if (front = NULL) front = back = pNew; el
17、se back-nextItem = pNew; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 35 页 - - - - - - - - - _(E)_; template Queue:Queue() QueueItem *p = front, *q; while(p != NULL) q = p-nextItem; delete p; p = q; 问题 1: 程序中有几处填空,将它们完成。(A)back(NULL) (B)front = NULL 或 back =
18、 NULL (C )pFront = front (D )pNew-nextItem = NULL (E)back = pNew 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 35 页 - - - - - - - - - 问题 2:()题中程序第 1,2 行为什么要说明一下类模板Queue ?如果没有这两行语句,程序还正确吗?答:不正确。因为在类QueueItem模板类的定义中用到了模板类Queue ,而此时Queue还没有定义,所以要先声明一下,告诉编译程序Queu
19、e是一个模板类,它将在程序的其他地方定义。如果没有这个说明,编译程序就不知道标识符Queue代表什么样的含义了。问题 3:程序第 22,23 行各有一个 const ,它们各自表示什么含义:答:第 22 行的 const 修饰的是函数的参数,表示在这个函数体中不能改它所修饰的参数所对应的实际参数的值。第 23 行的 const 修饰的是模板类Queue的成员函数 is_empty() ,它表示在函数 is_empty() 的函数体中不能改变任何数据成员的值。问题 4:程序中模板类 Queue的析构函数主要做了什么事情?为什么要这么做?答:析构函数中主要是释放链表中存放的各个节点的空间。因为 Q
20、ueue对象在其生存期间可能加入了很多节点, 从堆中申请了一些内存空间, 这些空间应该随着对象的消亡而释放掉,所以需要在析构函数中来释放这些空间。问题 5:下面的程序使用了queue.h 文件中定义的类模板,说明程序中哪些定义队列对象的语句是不正确的,哪些是正确的。#include “queue.h”void main() Queue q1; / 1 Queue q2; / 2 Queue q3(100); / 3 Queue q4100; / 4 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - -
21、 - - 第 12 页,共 35 页 - - - - - - - - - Queue *q5 = new Queue; / 5 / , . delete q5; 语句号1 2 3 4 5 错对错对对6下面的程序定义了三个类,Base是图形对象基类, Point 表示屏幕上的一个点,ColorPoint表示带颜色的点,基类中利用posx 和 posy 记录图形对象的位置。先阅读三个类的定义, 然后回答后面的问题 (假定程序中调用的SetPixel()和 SetColor() 是系统函数库中预定义的函数,可以直接使用)。/*/class Basepublic:Base():posz(0),posy
22、(0) ;Base(int px,int py);posz(px),posy(py) ;virtual void draw()=0;protected:int posx,posy; /图形对象的位置;class Point:public Basepublic:Point(int px,int py):Base(px,py) void draw() SetPixel(posx,posy); ;class Colorpoint:public Point名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - -
23、- - 第 13 页,共 35 页 - - - - - - - - - public;ColorPoint(int px,int py):Point(px,py)color=0;ColorPoint(int px,int py,int c):Point(px,py),color(c) void draw()SetColor(color);Point:draw();protected:int color;/*/问题下面的主程序使用了上面定义的三个类,程序中定义对象语句哪些是正确的,哪些是错误的?void main()Base b; /1Point p1; /2Point p2(3,4); /3C
24、olorPoint cp1; /4ColorPoint cp2(5,6); /5ColorPoint cp3(7,8,1); /6答: 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 35 页 - - - - - - - - - 问题 : 将类 ColorPoint的两个构造函数合并为一个构造函数,写出该函数的实现(提示 : 使用函数的默认参数)。答: 合并后的构造函数定义为: ColorPoint( int px , int py , int c=0 ) : Poin
25、t( px , py ) , color( c ) 问题 : 下面的程序段Base * p;p=new ColorPoint(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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年面向对象程序设计习题 2022 面向 对象 程序设计 习题
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内