2015年1月全国自考面向对象程序设计模拟试卷(一)一、单项选择题(本大题共10小题,每小题2分,共20分)在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内。
错选、多选或未选均无分。
第1题某一基类有构造函数A(),析构函数~A(),其派生类B的构造函数析构函数分别为B(),~B(),程序说明B的对象b时,下列说法正确的是()A. 开始时,先调用 A(),再调用B(),结束时,先调用~A(),再调用~B()B. 开始时,先调用 A(),再调用B(),结束时,先调用~B(),再调用~A()C. 开始时,先调用 B(),再调用A(),结束时,先调用~A(),再调用~B()D. 开始时,先调用 B(),再调用A(),结束时,先调用~B(),再调用~A()第二部分非选择题【正确答案】 B【你的答案】本题分数2分第2题执行下面程序,若要将ps所指向的变量的成员buffer 所指出的变量的内容加1,使用() struct mystruct{int *buffer;int len;}ps;A. (++ps)->bufferB. *++ps->bufferC. ++*ps->bufferD. ps++->buffer【正确答案】 C【你的答案】本题分数2分第3题下列语句中正确的是()class base{public:int b;};class base1:public base{ };class base2:public base{ };class base3:public abse1,public base2{public:int fun();};void main( ){int a; base3 d;A. a=d.b;B. a=b.base1::b;C. a=d.base::b;D. a=b;}本题分数2分第4题关于成员函数特征,下述描述中,()是错误的。
A. 成员函数一定是内联函数B. 成员函数可以重载C. 成员函数可以设置参数的缺省值D. 成员函数可以是静态的【正确答案】 A【你的答案】本题分数2分第5题提取空白字符操纵算子是()A. setbaseB. wsC. endsD. flush【正确答案】 B【你的答案】本题分数2分第6题下面说法不正确的是()A. 一个对象通过继承可以获得另一个对象的特性B. 面向对象就是将世界看成是由一组彼此相关并能相互间通信实体,即对象组成的C. 面向对象要求程序员集中于事物的本质特征,用抽象的观点看待程序D. 同一函数为不同的对象接受时,产生的行为是一样的,这称为一致性【正确答案】 D【你的答案】本题分数2分第7题 ()是编译程序。
A. 机器指令B. 操作系统C. 汇编D. C++本题分数2分第8题如果class类中的所有成员在定义时都没有使用关键字public、private或protected,则所有成员缺省定义为()A. publicB. protectedC. privateD. static【正确答案】 C【你的答案】本题分数2分第9题假定一个类的构造函数为A(int aa,int bb){a=aa;b=a*bb;},则执行A x(4,5);语句后,x.a 和x.b的值分别为()A. 4和5B. 5和4C. 4和20D. 20和5【正确答案】 C【你的答案】本题分数2分第10题设置虚基类的目的是()A. 消除两义性B. 简化程序C. 提高运行效率D. 减少目标代码【正确答案】 A二、填空题(本大题共10小题,每小题2分,共20分)请在每小题的空格中填上正确答案。
错填、不填均无分。
第1题基类的保护成员在公有派生类中是___,基类的公有成员在公有派生类中是___。
【正确答案】保护的公有的【你的答案】修改分数本题分数2分你的得分第2题面向对象的程序设计方法要求语言必须具备___、___、___和___这几个关键要素。
【正确答案】抽象封装继承多态性【你的答案】修改分数本题分数2分你的得分第3题在类中说明的任何成员不能使用___、___和___关键字进行修饰。
【正确答案】 extern auto register【你的答案】修改分数本题分数2分你的得分第4题如使用一个表达式引用多个基类中的成员,则这种对基类成员的访问就是___。
【正确答案】两义的【你的答案】修改分数本题分数2分你的得分第5题 class X{public:int a;enum BOOL{FALSE,TRUE};};void fun(X& x)}___=___;//将x的a赋值为所定义的布尔值FALSE}【正确答案】 x.a X::FALSE(或x.FALSE或X.FALSE)【你的答案】修改分数本题分数2分你的得分第6题结构是___的一种特例,其中成员在缺省情况下是___。
【正确答案】类,公有的【你的答案】修改分数本题分数2分你的得分第7题 C++语言是在标准___的基础上,引入“面向对象”概念而扩充形成的___语言。
【正确答案】语言,混合型面向对象语言【你的答案】本题分数2分修改分数你的得分第8题在C++中,声明构造函数和析构函数时,___使用const或volatile关键词。
【正确答案】不能【你的答案】修改分数本题分数2分你的得分第9题静态成员___对象的成员,友元函数___类的成员。
【正确答案】不是,是在基类中说明的函数,但它不是该【你的答案】本题分数2分修改分数你的得分第10题语句序列ifstream datafile;datafile.open(“data.dat”);的功能可用一个语句实现,这个语句是___。
【正确答案】ifstream datafile(”data.dat”);【你的答案】三、改错题(本大题共5小题,每小题2分,共10分)第1题请指出下列程序段中错误的语句,并说明原因。
class location{public:void init(int initx,int inity);private:int x=25;public:int getx();private:int y=12;};A. 正确B. 错误【正确答案】【你的答案】本题分数2分第2题内联函数必须在程序中第一次调用此函数的语句之前出现。
A. 正确B. 错误【正确答案】【你的答案】本题分数2分第3题下面程序希望产生的输出为4+3i,但是运行输出是3+3i,请指出错误所在并改正。
#includeclass complex{int real;∥实部int imag;∥虚部public:complex(int r=0,int i=0):real(r),imag(i){}void show(){cout<<real<<′+′<<imagmm′i′;}complex operator++(){real++;return * this;}};void main(){complex c(2,3)++++c;c.show();}A. 正确B. 错误【正确答案】【你的答案】本题分数2分</real<<′+′<<imagmm′i′;}第4题引用性说明的类名可以建立对象,也能说明指针或引用,或用在函数说明中。
A. 正确B. 错误【正确答案】【你的答案】本题分数2分第5题下面的程序先把字符串“Look out!”输出到一个文件中,然后再从该文件输入,并显示在屏幕上,显示效果为Look out!。
程序中有一处错误,请用下横线标出错误所在行,并给出更改意见。
#includevoid main(){ofstream outf(“D:\\tem.dat”,ios::trunc);outf<<“Look out!”;outf.close();ifstream inf(“D:\\tem.dat”);char k[20];inf>>k;cout<<k;inf.close();}A. 正确B. 错误【正确答案】</k;四、完成程序题(本大题共5小题,每小题4分,共20分)第1题 ___【正确答案】 10个空应分别填入: intfloat intconst floatconst const int float const【你的答案】本题分数4分你的得分修改分数第2题___【正确答案】应填写的语句如下: ::::rc.getWidthrc.getHeight 输出结果如下:Width=90 Height=180【你的答案】本题分数4分你的得分修改分数第3题___【正确答案】①virtual float area()=0; ②shape *s[]③new ④new ⑤2【你的答案】本题分数4分你的得分修改分数第4题在下面程序的横线处填上适当字句,使该程序执行结果为6。
#includepublic:___∥为X置值___∥取X值};void main(){base test;test.init(6);cout<<test.getnum();}【正确答案】 void init(int initX) {X=initX;} int Getnum(){return X;}【你的答案】本题分数4分你的得分修改分数</test.getnum();第5题完成下面类中的成员函数的定义。
#include#includeclass Point{private:int a,b;char *c;public:Point(int,int,char*);Point(Point&);};Point::Point(int x,int y,char*){strcpy(c,z);}Point::Point(){a=t,a;}___【正确答案】分析:由语句a=t.a;可推知复制构造函数的参数为Point &t,如果如下:Point::Point(int x,int y,char*z) { a=x; b=y; c=new char[strlen(z)+1]; strcpy(c,z); } Point::Point(Point&t) { a=t.a; b=t.b; c=new char[strlen(t.c)+1]; strcpy(c,t.c); }【你的答案】五、程序分析题(本大题共6小题,每小题5分,共30分)第1题分析下面程序的设计方法及输出结果。
#include″iostream.h″templateT max(T x,T y){return(x>y)?(x):(y);}void main(){int x=3;y=4;double a=2.3,b=3.4;cout<<max(x,y)<<endl;cout<<max(a,b)<<endl;}【正确答案】程序先生成一个函数模板,在调用时T先为int型,然后变成double型。