当前位置:文档之家› C++期末考试试卷及参考答案

C++期末考试试卷及参考答案

一、是非题(每小题 1. 5 分,共 15 分) 说明:判断各小题说法的正确性,在下面表格中对应的题号下填入是非选择, 若正确,则打钩(√);否则,打叉(×)。

返回值类型就可以了。

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 命令中 使用 头文件。

9.C++中,若将 操作符插入到输出流中,则以十六进制格式输出。

10.C++程序中,异常处理程序的主要任务是 。

三、单选题(在备选答案中选出一个正确答案填入括号内,每小题 2 分,共 20 分) 1.C++对 C 语言作了很多改进,下列描述中使得 C 语言发生质变,从面向过程变成 了面向对象的是( )。

学院 __________ 班级___________ 姓名___________学号____________——————————————装——————————订———————————————线—————————A.增加了一些新的运算符 B. 允许函数重载,并允许设置缺省参数C.规定函数说明必须用原型 D. 引进了类和对象的概念2.当一个函数无返回值时,定义它的函数的类型是( )。

A. voidB. intC. 无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 是一个基于事件驱动、基于消息的操作系统。

B.Windows 程序始终是程序而不是操作系统决定何时调用哪个函数。

C.对于使用VC 向导生成的程序框架,我们也可以用手工的方式写出。

D.MFC 类库其实是对windows API 函数的封装。

四、根据下面各小题题目要求进行简单回答(第1 小题6 分,第2 小题3 分,第3 小题6 分,共15 分)(1) 已知类B 和类D,它们的类关系如下。

请以类对象b1,d1 和指针pb1 为例简要说明C++赋值兼容规则。

(本小题 6 分)class B{ … };class D :pubic B{ … };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 <iostream.h>class A{public:virtual void act1() { cout<<"A::act1() called. "<<endl; }void act2() { act1(); }};class B : public A{public:void act1() {cout<<"B::act1() called. "<<endl;}};void main(){A a,*p;B b;p=&b;b.act1 ();p->act1();p->act2 ();}答:五、下面的程序共有17 行,程序的每行前面加上了行号。

程序中变量num、i 、temp、对象cout 和函数func()的作用域范围分别是什么?在程序的下面用行号来回答。

(每小题1 分,共10 分)1.#include <iostream.h>2.int num;3.void func();4.void main()5. {6.char name[20];7.int i;8. for(i=0; i<20; i++)9. {10.char temp;11.temp=name[i];12.cout<<temp;13. }14. }15. void func()16.{17. cout<<”A function!”;18. }回答:num 的作用域为从第行到第行。

i 的作用域为从第行到第行。

temp 的作用域为从第行到第行。

cout 的作用域为从第行到第行。

func 的作用域为从第行到第行。

六、程序回答题(每小题1 分,共5 分)说明:读懂程序,为便于提问,程序每行前面加有行号,请对所提的问题做出准确解答。

1.#include <iostream.h>2.int CircleArea()3.{4.double *pd=new double;5.if(!pd)6.{7.cout<<"Error Memory Allocation!"<<endl;8.return 1;9.}10.double &rd=*pd;11.cout<<"The radius is: ";12.cin>>rd;13.cout<<"The Area of Circle is: "<<rd*rd*3.14<<endl;14.delete &rd;15.return 0;16.}17.void main()18.{19.if(CircleArea())20.cout<<"The programn failed!"<<endl;21.else22.cout<<"The programn successed!"<<endl;23.}请写出下列问题答案:a) 第4 行起何作用?答: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() {cout<<i<<endl;}private:int i;};请完成上面2 个运算符重载函数,并以下面的主函数进行测试。

void main(){Integer A, B, C;A.Set(20);C.Set(10);B=A+4;B.Display();B=A+C;B.Display();B=4+A; // 此行代码有误,请分析错误原因并改正}八、编程题。

声明一个shape 抽象类,在此基础上派生出Rectangle 和Circle 类,二者都有GetArea ( ) 函数计算对象的面积,按下面的要求完成程序的编制工作。

( 1 ) Rectangle 类有m_Width, m_Height 属性;( 2 ) Circle 类有m_Radius 属性;( 3 ) 分别编写Rectangle 类和Circle 类带默认参数的构造函数;( 4 ) 编写主函数对Rectangle、Circle 类进行测试,使它们以统一的操作界面输出面积;(提示:利用for 循环进行输出)( 5 ) 回答将Shape 类声明为抽象类的方法及意义。

相关主题