C期末考试试卷及参考答
案
Last updated on the afternoon of January 3, 2021
一、是非题(每小题分,共15分)说明:判断各小题说法的正确性,在下面表
格中对应的题号下填入是非选择,
和
返回值类型就可以了。
2.函数定义中的形参的作用域是该函数的函数体。
3.用new 动态申请的内存空间,必须用delete 来释放。
4.构造函数和析构函数都可以声明为虚函数。
5.在公有继承中,基类中的公有成员和私有成员在派生类中都是可见的。
6.类的静态数据成员需要在定义每个类的对象时进行初始化。
7.使用关键字class 定义的类中缺省的访问权限是私有(private )的。
8.在基类中被说明为虚函数的类的成员函数必须在每个派生类中说明为虚函数,才能具有多态的特征。
++程序中,程序将流对象看作是文件的化身。
10.如果程序中有多处要抛掷异常,应该用不同的操作数类型来相互区别,操作数的值不能用来区别不同的异常。
二、填空题(每小题分,共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.当一个函数无返回值时,定义它的函数的类型是( )。
C.无.下列
不是构造函数特征的是()。
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) operator+(AB &a)
C. operator+(AB a)
&operator+()9.下列不属于VC消息映射内容的是( )。
A.通过将DECLARE_MESSAGE_MAP添加到类声明,
声明消息映射B.改写MFC相关类的虚函数
C.放置标识消息的宏来执行消息映射
D.添加成员函数来处理消息10.下列
关于VC++编程描述中,错误的是(
)
。
是一个基于事件驱动、基于消息的操作系统。B.Windows
程序始终是程序而不是操作系统决定何时调用哪个函数。
C.对于使用VC向导生成的程序框架,我们也可以用手工的
方式写出。D.MFC类库其实是对windowsAPI函数的封装。
四、根据下面各小题题目要求进行简单回答(第1小题6分,第2小题3分,第3小题6分,共15分)
(1) 已知类B和类D,它们的类关系如下。请以类对象b1,d1和指针pb1为例简要说明C++赋值兼容规则。(本小题6分)
class B
{…};
classD:pubicB
{…};
B b1,*pb1;D
d1;
答:a)
b)
C)
(2)下列的程序定义了一个交换两个浮点数的函数swap,并在主函数中调用这个
函数进行两个浮点数的交换(本小题3分)
voidswap(float a,float b)
{
floattemp=
a;a=b;b=te
mp;
}
voidmain()
{
floata=1,b=
2;swap(a,b);
}
错误为:
改正方法为:
(3)写出下面程序运行结果。(本小题6分)
#include<>classA
{public:
virtualvoidact1()
{cout<<"A::act1()called."< }; classB:publicA {public: voidact1(){cout<<"B::act1()called."< }; voidmain() { Aa,*p; Bb;p= &b; (); p->act1(); p->act2(); } 答: 五、下面的程序共有17行,程序的每行前面加上了行号。程序中变量num、i、temp、对象cout和函数func()的作用域范围分别是什么在程序的下面用行号来回答。(每小题1分,共10分) 1.#include<> 2.intnum; 3.voidfunc(); 4.voidmain()5 .{ 6.charname[20]; 7.inti; 8. for(i=0;i<20;i++) 9. { 10.chartemp; 11.temp=name[i]; 12.cout< 13.} 14.} ()16.{ <<”Afunction!”; 18.} 回答: num的作用域为从第行到第 行。i的作用域为 从第行到第 行。temp的作用域 为从第行到第 行。cout的作用域 为从第行到第 行。func的作用域 为从第行到第 行。 六、程序回答题(每小题1分,共5分)说明:读懂程序,为便于提问, 程序每行前面加有行号,请对所提的问题做出准 确解答。 1.#include<>2.int CircleArea() 3.{ 4. double*pd=newdoub le;5.if(!pd) 6.{ 7. cout<<"ErrorMemoryAllocation!"<< endl;8.return1; 9.} 10.double&rd=*pd; 11. cout<<"Theradiusis: ";12.cin>>rd; 13.cout<<"TheAreaofCircleis:"< 14.delete&rd; 15. return0 ;16.} 17.voidmain() 18.{ 19.if(CircleArea()) 20. cout<<"Theprogramnfailed!"< 21.else 22.cout<<"Theprogramnsuccessed!"< 23.} 请写出下列问题答案: a) 第4行起何作用? 答: b) 第5-9行可否省去?并说明原 因。答: c) 第14行起何作用? 答: d) 此程序功能是什么? 答: e) 解释14行中&符号的意义? 答: 七、请完成下面2个运算符重载函数,并对程序最后一行分析错误原因并改正(本题 运算符重载函数各3分,分析错误原因并改正4分,共10 分)给定整数类: classInteger { public: voidSet(intii=0){i=ii;}Integerope rator+(intc);Integeroperator+(Int eger&c);voidDisplay(){cout< private: inti; }; 请完成上面2个运算符重载函数,并以下面的主函数进行测试。 voidmain() { Integer A,B,C;A. Set(20);C.Set(10) ;B=A+4; B.Display();B =A+C; B.Display(); B::act1()called. 五、下面的程序共有17行,程序的每行前面加上了行号。程序中变量num、i、temp、对象cout和函数func()的作用域范围分别是什么在程序的下面用行号来回答。(每小题1分,共10分) 评分标准:答对者得1分,否则不 得分。作用域范围分别为: num的作用域为从第2行到第18行。 i 的作用域为从第7 行到第14 行。temp的作用域为从第10 行 到第 13 行。 cout的作用域为从第 1 行到第18 行。func的作用域为从 第 3 行到第18 行。 六、程序回答题(每小题1分,共5分)评分标准:每题与 参考答案的叙述含义相同者得分,否则酌情给分。 1、动态分配一个double内存空间。 2、不可以,此程序段主要用来防止不能分配内存空间。 3、释放所分配的内存空间。 4、计算圆面积。 5、取地址。 七、阅读下列程序,回答后面提出的问题。(本题 10分)评分标准:见参考程序中的注释。 (1)IntegerInteger::operator+(intc) (3分) { Intege ra;=c+i; returna; } (2)IntegerInteger::operator+(Integer&c) (3分) { Integera ;=+i;ret urna; } (3)Integeroperator+(intm,Integer&c) (4分) { Integera; =+m;ret urna; } 八、程序回答题。(每小题2分,本题10分) 评分标准:每题与参考答案的叙述含义相同者得分,否则酌情给分。 #include<>classShape {public: virtualintGetArea()=0; }; classRectangle:publicShape {public: Rectangle(intwidth=0,intheight=0){m_Width=width,m_Height=height;}int GetArea(){returnm_Width*m_Height;} private: intm_Width,m_Height; }; classCircle:publicShape {public: Circle(intradius=0){m_Radius=radius;}int GetArea(){return2**m_Radius;} private: intm_Radius; }; voidmain() { Rectanglea(4,5);Circle b(2);Shape *p[2]={&a,&b};for(in ti=0;i<2;i++) cout< GetArea()< }