全国高等教育自学考试面向对象程序设计试题.docx
《全国高等教育自学考试面向对象程序设计试题.docx》由会员分享,可在线阅读,更多相关《全国高等教育自学考试面向对象程序设计试题.docx(16页珍藏版)》请在冰豆网上搜索。
![全国高等教育自学考试面向对象程序设计试题.docx](https://file1.bdocx.com/fileroot1/2022-11/23/4eb50e50-83c8-43f0-acab-08658c4fc8ac/4eb50e50-83c8-43f0-acab-08658c4fc8ac1.gif)
全国高等教育自学考试面向对象程序设计试题
全国高等教育自学考试面向对象
程序设计试题
一、单项选择题(本大题共10小题,每小题2分,共20分)
1.下列特性中,C与C++共有的是()
A.继承B.封装
C.多态性D.函数定义不能嵌套
2.通常情况下,函数模板中的类型参数个数不能是()
A.0B.2
C.4D.3
3.在下列成对的表达式中,运算符“+”的意义不相同的一对是()
A.5.0+2.0和5.0+2B.5.0+2.0和5+2.0
C.5.0+2.0和5+2D.5+2.0和5.0+2
4.类的指针成员的初始化是通过函数完成的,这个函数通常是()
A.析构函数B.构造函数
C.其它成员函数D.友元函数
5.要禁止修改指针p本身,又要禁止修改p所指向的数据,这样的指针应定义为()
A.constchar*p=“ABCD”;B.charconst*p=“ABCD”;
C.char*constp=“ABCD”;D.constchar*constp=“ABCD”;
6.静态成员函数没有()
A.返回值B.this指针
C.指针参数D.返回类型
7.当一个类的某个函数被说明为virtual时,该函数在该类的所有派生类中()
A.都是虚函数
B.只有被重新说明时才是虚函数
C.只有被重新说明为virtual时才是虚函数
D.都不是虚函数
8.下面叙述不正确的是()
A.派生类一般都用公有派生
B.对基类成员的访问必须是无二义性的
C.赋值兼容规则也适用于多重继承的组合
D.基类的公有成员在派生类中仍然是公有的
9.在C++中实现封装是借助于()
A.枚举B.类
C.数组D.函数
10.所有在函数中定义的变量,都是()
A.全局变量B.局部变量
C.静态变量D.寄存器变量
二、填空题(本大题共10小题,每小题2分,共20分)
不写解答过程,将正确的答案写在每小题的空格内。
错填或不填均无分。
11.设函数max是由函数模板实现的,并且max(3.5,5)和max(10,5)都是正确的函数调用,则该模板具有______个类型参数。
12.在单继承和多继承方式中,面向对象的程序设计应尽量使用______继承。
13.语句序列
ifstreamdatafile;
datafile.open(“data.dat”);
的功能可用一个语句实现,这个语句是______。
14.将关键字const写在函数头之后,函数体之前,说明该函数是一个const成员函数。
此时const不是指定函数的返回值,而是修饰______指针。
15.一个抽象类的派生类可以实例化的必要条件是实现了所有的______。
16.在C++中,虚函数帮助实现了类的______性。
17.通过C++语言中类的______,可以扩充和完善已有类以适应新的需求。
18.为了在对象生存期结束时释放其指针成员所指向的动态存储空间,通常需要为该类定义______。
19.在联合中,所有数据成员具有______的地址,任一时刻只有______个数据成员有效。
20.在已经定义了整型指针ip后,为了得到一个包括10个整数的数组并由ip所指向,应使用语句______。
三、改错题(本大题共5小题,每小题2分,共10分)
21.下面的类定义有一处错误,请用下横线标出错误所在行并改正错误。
classA{
inta;
public;
A(intaa):
a=aa{}
};
22.下面的程序先把字符串“Lookout!
”输出到一个文件中,然后再从该文件输入,并显示在屏幕上,显示效果为Lookout!
。
程序中有一处错误,请用下横线标出错误所在行,并给出更改意见。
#include
voidmain(){
ofstreamoutf(“D:
\\tem.dat”,ios:
:
trunc);
outf<<“Lookout!
”;
outf.close();
ifsteaminf(“D:
\\tem.dat”);
chark[20];inf>>k;count<inf.close();
}
23.下面的程序有一处错误,请用下横线标出错误所在行并改正错误。
#include
classTest{
public;
staticintx;
};
intx=20;//对类成员初始化
voidmain()
{
cout<:
x;
}
24.下面的程序类B的定义中有一处错误,请用下横线标出错误所在行并说明错误原因。
#include
#include
classA{
public:
A(constchar*nm){strcpy(name,nm);}
private:
charname[80];
};
classB:
publicA{
public:
B(constchar*nm):
A(nm){}
voidPrintName()const;
};
voidB:
:
PrintName()const{
cout<<“name:
”<}
voidmain(){
Bb1(“wangli”);
b1.PrintName();
}
25.用下横线标出下面程序main函数中的错误所在行,并说明错误原因。
#include
classLocation{
private:
intX,Y;
public;
voidinit(intinitX,intinitY);
intsumXY();
};
voidLocation:
:
init(intinitX,intinitY)
{
X=initX;
Y=initY;
}
intLocation:
:
sumXY()
{
returnX+Y;
}
voidmain()
{
LocationA1;
intx,y;
A1.init(5,3);
x=A1.X;y=A1.Y;
cout<}
全国高等教育自学考试面向对象程序设计试题参考答案
参考答案
一、单项选择题(本大题共10小题,每小题2分,共20分)
1.D 2.A 3.C 4.B 5.D 6.B 7.A 8.D 9.B 10.B
二、填空题(本大题共10小题,每小题2分,共20分)
11.2
12.单一或单
l3.ifstreamdatafile(”data.dat”);
14.this
15.纯虚函数 (答“虚函数”给1分)
16.多态
17.继承机制
18.析构函数
19.相同一 (每空1分)
20.ip=newint[10];(缺new不给分,缺int给1分)或iP=(int*)malloc(sizeof(int)*10)
三、改错题(本大题共5小题,每小题2分,共10分)【评分标准】各小题中,指出错误得1分,说明出错原因或改正正确得1分。
21.第4行的“:
a=aa”有错,应改为“:
a(aa)”或等价的写法。
22.第7行错,应改为:
chark;while(inf.get(k))cout<<k;注:
还可改为
chark;while((k=inf.get())!
=EOF)cout<<k;或
chark[20];inf.get(k,20);cout<chark[20];inf.getline(k,20);cout<<k;等
其中的变量k也可以是其他变量名。
23.程序中第6行错误,该行应为:
intTest:
:
x=20;
24.第12行有错,因为在类B中,name是由类A私有成员继承来的,不能被派生类访问。
25.第24行语句x=Al.x;y=Al.y;有错,因为main函数不能访问对象Al的私有成员。
2001年10月全国计算机及应用本科面向对象程序设计试卷[附参考答案]
一、单项选择题(本大题共10小题,每小题2分,共20分)
1.在C++中,函数原型不能标识()
A.函数的返回类型B.函数参数的个数
C.函数参数类型D.函数的功能
2.在C++程序中,对象之间的相互通信通过()
A.继承实现B.调用成员函数实现
C.封装实现D.函数重载实现
3.对于任意一个类,析构函数的个数最多为()
A.0B.1C.2D.3
4.下面函数模板定义中不正确的是()
A.templateB.template
QF(Qx){QF(Qx){
returnQ+x;returnx+x;
}}
C.templateD.template
TF(Tx){TF(Tx){
returnx*x;returnx>1;
}}
5.友元关系不能()
A.继承
B.是类与类的关系
C.是一个类的成员函数与另一个类的关系
D.提高程序的运行效率
6.语句ofstreamf(″SALARY.DAT″,ios:
:
app|ios:
:
binary);的功能是建立流对象f,试图打开文件SALARY.DAT并与之连接,并且()
A.若文件存在,将文件写指针定位于文件尾;若文件不存在,建立一个新文件
B.若文件存在,将其置为空文件;若文件不存在,打开失败
C.若文件存在,将文件写指针定位于文件首;若文件不存在,建立一个新文件
D.若文件存在,打开失败;若文件不存在,建立一个新文件
7.下面说法正确的是()
A.内联函数在运行时是将该函数的目标代码插入每个调用该函数的地方
B.内联函数在编译时是将该函数的目标代码插入每个调用该函数的地方
C.类的内联函数必须在类体内定义
D.类的内联函数必须在类体外通过加关键字inline定义
8.可以用p.a的形式访问派生类对象p的基类成员a,其中a是()
A.私有继承的公有成员B.公有继承的私有成员
C.公有继承的保护成员D.公有继承的公有成员
9.在公有派生情况下,有关派生类对象和基类对象的关系,不正确的叙述是()
A.派生类的对象可以赋给基类的对象
B.派生类的对象可以初始化基类的引用
C.派生类的对象可以直接访问基类中的成员
D.派生类的对象的地址可以赋给指向基类的指针
10.对于类定义
classA{
public:
virtualvoidfunc1(){}
voidfunc2(){}
};
classB:
publicA{
public:
voidfunc1(){cout<<″classBfunc1″<virtualvoidfunc2(){cout<<″classBfunc2″<};
下面正确的叙述是()
A.A:
:
func2()和B:
:
func1()都是虚函数
B.A:
:
func2()和B:
:
func1()都不是虚函数
C.B:
:
func1()是虚函数,而A:
:
func2()不是虚函数
D.B:
:
func1()不是虚函数,而A:
:
func2()是虚函数
第二部分非选择题(共80分)
二、填空题(本大题共10小题,每小题2分,共20分)不写解答过程,将正确的答案写在每小题的横线处。
错填或不填均无分。
11.定义类的动态对象数组时,系统只能够自动调用该类的_________构造函数对其进行初始化。
12.在C++程序设计中,建立继承关系倒挂的树应使用_________继承。
13.表达式cout<14.基类的公有成员在派生类中的访问权限由_________决定。
15.C++支持的两种多态性分别是_________多态性和_________多态性。
16.C++中语句constchar*constp=″hello″;所定义的指针p和它所指的内容都不能被_________。
17.假定AB为一个类,则语句AB(AB&x);为该类_________构造函数的原型说明。
18.将关键字const写在成员函数的_________和_________之间时,所修饰的是this指针。
19.在C++中,访问一个对象的成员所用的运算符是_________,访问一个指针所指向的对象的成员所用的运算符是_________。
20.派生类从一个或多个以前定义的该类的_________继承数据和函数。
三、改错题(本大题共5小题,每小题2分,共10分)
21.指出下面程序段中的错误,并说明出错原因。
classA{
inta,b;
public:
A(intaa,intbb){a=aa;b=bb;}
};
Ax(2,3),y(4);
22.指出并改正下面利用类模板的对象定义中的错误。
template
classTany{
Tx,y;
public:
Tany(Ta,Tb){x=a,y=b;}
Tsum(){returnx+y;}
};
Tany(int)obj(10,100);
23.指出下面程序段中的错误,并说明出错原因。
classone{
private:
inta;
public:
voidfunc(two&);
};
classtwo{
private:
intb;
friendvoidone:
:
func(two&);
};
voidone:
:
func(two&r)
{
a=r.b;
}
24.指出下面程序段中的错误,并说明出错原因。
#include
classA{
public:
voidfun(){cout<<″a.fun″<};
classB{
public:
voidfun(){cout<<″b.fun″<voidgun(){cout<<″b.gun″<};
classC:
publicA,publicB{
private:
intb;
public:
voidgun(){cout<<″c.gun″<voidhun(){fun();}
};
25.指出下面程序段中的错误,并说明出错原因。
classLocation{
intX,Y=20;
protected:
intzeroX,zeroY;
intSetZero(intZeroX,intZeroY);
private:
intlength,height;
public:
floatradius;
voidinit(intinitX,intinitY);
intGetX();
intGetY();
};
全国2001年10月高等教育自学考试
面向对象程序设计试题参考答案
第一部分选择题(共20分)
一、单项选择题(本大题共10小题,每小题2分,共20分)
1.D2.B3.B4.A5.A
6.A7.B8.D9.C10.C
第二部分非选择题(共80分)
二、填空题(本大题共10小题,每小题2分,共20分)
11.无参
12.单一(或单)
13.cout<<′\n′(或cout<<′\12′,或cout<<′\xA′,或其它等价形式)
14.访问控制(或其它等价形式)
15.编译时的(或静态,或操作重载)
运行时的(或动态,或虚函数)
16.改变(或重新赋值)
17.复制初始化(或拷贝)
18.函数头(或参数表)函数体
19.成员选择运算符(或“.”)成员访问运算符(或“->”)
20.基类
三、改错题(本大题共5小题,每小题2分,共10分)
21.Ax(2,3),y(4);语句出错,因为没有单参数的构造函数(或者y(4)少写了一个参数)。
22.Tany(int)obj(10,100);出错,应为Tanyobj(10,100);语句。
23.voidfunc(two&);出错,two尚未声明(或应在classone前加声明语句classtwo;)。
24.voidhun(){fun();}出错,C:
:
fun()有二义性。
25.intX,Y=20;出错,不能采用这种方式初始化
全国2002年10月高等教育自学考试面向对象程序设计试题
一、单项选择题(在每小题的四个备选答案中选出一个正确答案,并将其号码填在题干的括号内。
每小题2分,共20分)
1.所谓数据封装就是将一组数据和与这组数据有关操作组装在一起,形成一个实体,这实体也就是()
A.类B.对象C.函数体D.数据块
2.面向对象的程序设计语言必须具备的关键要素是()
A.抽象和封装B.抽象和多态性
C.抽象、封装、继承和多态性D.抽象、封装和继承性
3.类的构造函数被自动调用执行的情况是在定义该类的()
A.成员函数时B.数据成员时
C.对象时D.友元函数时
4.设有函数模板
template
QSum(Qx,Qy){
return(x)+(y);
}
则下列语句中对该函数模板错误的使用是()
A.Sum(10,2);B.Sum(5.0,6.7);
C.Sum(15.2f,16.0f);D.Sum(″AB″,″CD″);
5.已知类A是类B的友元,类B是类C的友元,则()
A.类A一定是类C的友元
B.类C一定是类A的友元
C.类C的成员函数可以访问类B的对象的任何成员
D.类A的成员函数可以访问类B的对象的任何成员
6.如果表达式++i*k中的“++”和“*”都是重载的友元运算符,则采用运算符函数调用格式,该表达式还可表示为()
A.operator*(i.operator++(),k)B.operator*(operator++(i),k)
C.i.operator++().operator*(k)D.k.operator*(operator++(i))
7.下列说法中正确的是()
A.类定义中只能说明函数成员的函数头,不能定义函数体
B.类中的函数成员可以在类体中定义,也可以在类体之外定义
C.类中的函数成员在类体之外定义时必须要与类声明在同一文件中
D.在类体之外定义的函数成员不能操作该类的私有数据成员
8.若派生类的成员函数不能直接访问基类中继承来的某个成员,则该成员一定是基类中的()
A.私有成员B.公有成员
C.保护成员D.保护成员或私有成员
9.对基类和派生类的关系描述中,错误的是()
A.派生类是基类的具体化B.基类继承了派生类的属性
C.派生类是基类定义的延续D.派生类是基类的特殊化
10.类B是类A的公有派生类,类A和类B中都定义了虚函数func(),p是一个指向类A对象的指针,则p->A:
:
func()将()
A.调用类A中的函数func()
B.调用类B中的函数func()
C.根据p所指的对象类型而确定调用类A中或类B中的函数func()
D.既调用类A中函数,也调用类B中的函数
二、填空题(每小题2分,共20分)
11.假定用户没有给一个名为AB的类定义析构函数,则系统自动给出的缺省析构函数定义为__________。
12.模板定义中标识类型的参数必须用关键字_________修饰。
13.表达式count<14.通过C++语言中的_________机制,可以从现存类中构建其子类。
15.要在调用虚函数的时候强制进行静态联编,可以通过在调用中对虚函数加_________实现。
16.封装要求一个对象应具备明确的功能,并具有_________以便和其它对象相互作用。
17.在删除一个动态对象时,将自动调用该动态对象所属类的_________函数。
18.静态成员函数、友元函数、构造函数和析构函数中,不属于成员函数的是_________。
19.在下面的类定义中,私有成员有_________。
classLocation{
intX,Y;
protected:
intzeroX,zerxY;
intSetZero(intzeroX,intzeroY);
private:
intlength,height;
public:
voidinit(intinitX,intinitY);
intGetX();
intGetY();
};
20.类的私有成员只能被它的成员函数和_________