2022年C++期末考试试卷及参考答案 .pdf
本试卷共 8 页本页为第1 页考 试 科 目面 向 对象 程 序 ( C+) 考 试成 绩考 试 对 象XX 计 本 1 、 2、 3 班一、是非题(每小题1. 5 分,共15 分)说明:判断各小题说法的正确性,在下面表格中对应的题号下填入是非选择,若正确,则打钩() ;否则,打叉() 。题号1 2 3 4 5 6 7 8 9 10 是/ 否1. 说明函数原型时不需要指明每个函数参数的名字,只需要说明每个参数的类型和返回值类型就可以了。2. 函数定义中的形参的作用域是该函数的函数体。3. 用 new 动态申请的内存空间,必须用delete 来释放。4. 构造函数和析构函数都可以声明为虚函数。5. 在公有继承中,基类中的公有成员和私有成员在派生类中都是可见的。6. 类的静态数据成员需要在定义每个类的对象时进行初始化。7. 使用关键字class 定义的类中缺省的访问权限是私有(private)的。8. 在基类中被说明为虚函数的类的成员函数必须在每个派生类中说明为虚函数,才能具有多态的特征。9. C+ 程序中 ,程序将流对象看作是文件的化身。10如果程序中有多处要抛掷异常,应该用不同的操作数类型来相互区别,操作数的值不能用来区别不同的异常。二、填空题(每小题1. 5 分,共 15 分)1 变 量 名是 变 量的 标识 , 由组 成 , 而 且必 须 以开头。2有了函数原型,函数的作用域就不是从开始,而是从开始。3获取一个变量的地址所采用的操作符是。4使用 const 语句定义一个标识符常量时,则必须对它同时进行。5假定类AB 中有一个公用属性的静态数据成员bb,在类外不通过对象名访问该成员 bb 的写法为。6 typedef 语句的作用为。7平时所提到的使用MFC 编程,这里的 MFC 是的缩写。8若要在程序文件中进行标准输入输出操作,则必须在开始的 # include 命令中使用头文件。9C+ 中,若将操作符插入到输出流中,则以十六进制格式输出。10C+ 程序中,异常处理程序的主要任务是。三、单选题(在备选答案中选出一个正确答案填入括号内,每小题2 分,共20 分)1C+ 对 C 语言作了很多改进,下列描述中使得C 语言发生质变,从面向过程变成了面向对象的是() 。学院_班级_姓名_学号_装订线名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 1 页,共 11 页 - - - - - - - - - 本试卷共 8 页本页为第2 页A增加了一些新的运算符B. 允许函数重载,并允许设置缺省参数C规定函数说明必须用原型D. 引进了类和对象的概念2当一个函数无返回值时, 定义它的函数的类型是( ) 。A. void B. int C. 无D. long 3下列不是构造函数特征的是() 。A. 构造函数的函数名与类名相同B. 构造函数可以重载C. 构造函数可以设置缺省参数D. 构造函数必须指定返回类型4关于成员函数特征的下列描述中,错误的是() 。A成员函数一定是内联函数B成员函数可以重载C成员函数可以设置缺省参数值D 成员函数可以是静态的5关于 new 运算符的下列描述中,错误的是() 。A . 它可以用来动态创建对象和对象数组B. 使用它创建的对象或对象数组可以使用运算符delete 删除C. 使用它创建对象时要调用构造函数D. 使用它创建对象数组时必须指定初始值 6 派生类的对象对它的基类成员中可以访问的是() 。A. 公有继承的公有成员B. 公有继承的私有成员C. 公有继承的保护成员D. 私有继承的公有成员7下列描述中,正确的是(). A. 虚函数是一个static 类型的成员函数B. 虚函数是一个非成员函数C. 抽象类是指具有纯虚函数的类D. 抽象类可以说明其对象8假定要对类AB 定义加号操作符重载成员函数,实现两个AB 类对象的加法,并返回相加结果,则该成员函数的声明语句为 ( ) 。A. AB operator+(AB & a, AB & b) B. AB operator+(AB & a) C. operator+(AB a) D. AB & operator+( ) 9下列不属于VC消息映射内容的是( ) 。A. 通过将 DECLARE_MESSAGE_MAP 添加到类声明,声明消息映射B. 改写 MFC相关类的虚函数C. 放置标识消息的宏来执行消息映射D. 添加成员函数来处理消息 10 下列关于 VC+ 编程描述中,错误的是() 。A. Windows 是一个基于事件驱动、基于消息的操作系统。BWindows 程序始终是程序而不是操作系统决定何时调用哪个函数。C对于使用VC 向导生成的程序框架,我们也可以用手工的方式写出。DMFC 类库其实是对windows API 函数的封装。四、根据下面各小题题目要求进行简单回答(第1 小题 6 分,第 2 小题 3 分,第3 小题 6 分,共 15 分)(1) 已知类 B 和类 D,它们的类关系如下。请以类对象b1,d1 和指针 pb1 为例简要说明C+ 赋值兼容规则。 (本小题 6 分)class B ;class D :pubic B 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 2 页,共 11 页 - - - - - - - - - 本试卷共 8 页本页为第3 页 ;B b1, * pb1; D d1; 答: a) b) C) (2) 下列的程序定义了一个交换两个浮点数的函数swap,并在主函数中调用这个函数进行两个浮点数的交换(本小题 3 分)void swap (float a , float b) float temp=a; a=b; b=temp; void main( ) float a=1,b=2; swap ( a, b ); 错误为:改正方法为:(3) 写出下面程序运行结果。 (本小题 6 分)#include class A public: virtual void act1() coutA:act1() called. endl; void act2() act1(); ; class B : public A public: void act1() coutB:act1() called. act1(); p-act2 (); 答:五、下面的程序共有17 行,程序的每行前面加上了行号。程序中变量num、i 、temp、对象cout 和函数func() 的作用域范围分别是什么?在程序的下面用行号来回答。(每小题 1 分,共10 分)1.#include 2.int num; 3.void func(); 4.void main() 5. 6.char name20; 7.int i; 8. for(i=0; i20; i+) 9. 10.char temp; 11.temp=namei; 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 4 页,共 11 页 - - - - - - - - - 本试卷共 8 页本页为第5 页12.couttemp; 13. 14. 15. void func() 16. 17. cout”A function!”;18. 回答:num 的作用域为从第行到第行。i 的作用域为从第行到第行。temp 的作用域为从第行到第行。cout 的作用域为从第行到第行。func 的作用域为从第行到第行。六、程序回答题(每小题1 分,共5 分)说明:读懂程序,为便于提问,程序每行前面加有行号,请对所提的问题做出准确解答。1#include 2int CircleArea() 3 4double *pd=new double; 5if(!pd) 6 7coutError Memory Allocation!endl; 8return 1; 9 10double &rd=*pd; 11coutrd; 13coutThe Area of Circle is: rd*rd*3.14endl; 14delete &rd; 15return 0; 16 17void main() 18 19if(CircleArea() 20coutThe programn failed!endl; 21else 22coutThe programn successed!endl; 23 请写出下列问题答案:a) 第 4 行起何作用?名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 5 页,共 11 页 - - - - - - - - - 本试卷共 8 页本页为第6 页答:b) 第 5-9 行可否省去?并说明原因。答:c) 第 14 行起何作用?答:d) 此程序功能是什么?答:e) 解释 14 行中 &符号的意义?答:七、请完成下面2 个运算符重载函数,并对程序最后一行分析错误原因并改正(本题运算符重载函数各3 分,分析错误原因并改正4 分,共 10 分)给定整数类:class Integer public: void Set ( int ii=0 ) i=ii; Integer operator + ( int c ); Integer operator + (Integer & c); void Display() coutiendl; private: int i; ; 请完成上面2 个运算符重载函数,并以下面的主函数进行测试。void main() Integer A, B, C; ASet(20); CSet(10); B=A+4; BDisplay(); B=A+C; BDisplay(); B=4+A; / 此行代码有误,请分析错误原因并改正 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 6 页,共 11 页 - - - - - - - - - 本试卷共 8 页本页为第7 页八、编程题。声明一个shape 抽象类,在此基础上派生出Rectangle 和 Circle 类,二者都有GetArea ( ) 函数计算对象的面积,按下面的要求完成程序的编制工作。名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 7 页,共 11 页 - - - - - - - - - 本试卷共 8 页本页为第8 页( 1 ) Rectangle 类有m_Width, m_Height 属性;( 2 ) Circle 类有m_Radius 属性;( 3 ) 分别编写Rectangle 类和 Circle 类带默认参数的构造函数;( 4 ) 编写主函数对Rectangle 、Circle 类进行测试,使它们以统一的操作界面输出面积; (提示:利用for 循环进行输出)( 5 ) 回答将 Shape 类声明为抽象类的方法及意义。(每小题2 分,本题共10 分)答案和评分标准 (A 卷):名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 8 页,共 11 页 - - - - - - - - - 本试卷共 8 页本页为第9 页一、是非题(每小题1.5 分,共 15 分)评分标准:选对者得1.5 分,否则不得分题号1 2 3 4 5 6 7 8 9 10 对错二、填空题(每小题1. 5 分,共15 分)评分标准:每题与参考答案相同者得1.5 分,否则不得分。1、字母数字下划线,字母或下划线2、函数定义函数声明3、 & 4、 初始化5、AB:bb 6、 将一个标识符声明成某个数据类型的别名7、Microsoft Foundation Classes 8、iostream.h 9、 hex 10、允许用户排除环境错误,继续运行程序三、单选题(在备选答案中选出一个正确答案填入括号内,每小题2 分,共20 分)评分标准:选对者得2 分,否则不得分。题号1 2 3 4 5 6 7 8 9 10 选项D A D A D A C B B B 四、根据下面各小题题目要求进行简单回答(第1 小题 6 分,第 2 小题 3 分,第 3 小题 6 分,共15 分)评分标准:每题与参考答案的叙述含义相同者得分,否则酌情给分。(1)a、派生类对象可以赋值给基类对象b1 = d1; b、派生类的对象也可以初始化基类对象的引用B & bb = d1; c 、派生类对象的地址也可以赋给指向基类的指针pb1 = & d1; (2)错误为: void swap(float a ,float b ); 改正方法为:void swap(float & a ,float & b ); (3)运行结果为:B:act1() called. B:act1() called. B:act1() called. 五、下面的程序共有17 行,程序的每行前面加上了行号。程序中变量num 、i 、 temp、对象 cout 和函数func() 的作用域范围分别是什么?在程序的下面用行号来回答。(每小题1 分,共 10 分)评分标准:答对者得1 分,否则不得分。作用域范围分别为:num 的作用域为从第 2 行到第 18 行。i 的作用域为从第7 行到第14 行。temp 的作用域为从第10 行到第13 行。名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 9 页,共 11 页 - - - - - - - - - 本试卷共 8 页本页为第10 页cout 的作用域为从第1 行到第18 行。func 的作用域为从第3 行到第18 行。六、程序回答题(每小题1 分,共5 分)评分标准:每题与参考答案的叙述含义相同者得分,否则酌情给分。1、动态分配一个double 内存空间。2、不可以,此程序段主要用来防止不能分配内存空间。3、释放所分配的内存空间。4、计算圆面积。5、取地址。七、阅读下列程序,回答后面提出的问题。(本题 10 分)评分标准:见参考程序中的注释。(1) Integer Integer:operator + (int c) (3 分) Integer a; a.i=c+i; return a; (2) Integer Integer:operator + (Integer & c) (3 分) Integer a; a.i=c.i+i; return a; (3) Integer operator + (int m ,Integer & c) (4 分) Integer a; a.i=c.i+m; return a; 八、程序回答题。 (每小题2 分,本题 10 分)评分标准:每题与参考答案的叙述含义相同者得分,否则酌情给分。#include class Shape public: virtual int GetArea() =0; ; class Rectangle : public Shape public: Rectangle(int width=0,int height=0) m_Width=width,m_Height=height; int GetArea() return m_Width*m_Height; private: int m_Width, m_Height; ; class Circle : public Shape 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 10 页,共 11 页 - - - - - - - - - 本试卷共 8 页本页为第11 页public: Circle(int radius=0) m_Radius=radius; int GetArea() return 2*3.14*m_Radius; private: int m_Radius; ; void main() Rectangle a(4,5); Circle b(2); Shape * p2=&a,&b; for(int i=0;i2;i+) coutGetArea()endl; 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 11 页,共 11 页 - - - - - - - - -