全国高等教育自学考试面向对象程序设计试题.docx
《全国高等教育自学考试面向对象程序设计试题.docx》由会员分享,可在线阅读,更多相关《全国高等教育自学考试面向对象程序设计试题.docx(16页珍藏版)》请在冰豆网上搜索。
全国高等教育自学考试面向对象程序设计试题
全国2006年1月高等教育自学考试
面向对象程序设计试题
课程代码:
02328
一、单项选择题(本大题共10小题,每小题2分,共20分)
在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内。
错选、多选或未选均无分。
1.面向对象程序设计中的数据隐藏指的是( )
A.输入数据必须输入保密口令B.数据经过加密处理
C.对象内部数据和代码合并在一起D.对象内部数据结构的不可访问性
2.在C++中,编写一个内联函数Fun,使用int类型的参数,求其平方并返回,返回值也为int类型,下列定义正确的是( )
A.intFun(intx){returnx*x;}B.inlineintFun(intx){returnx*x;}
C.intinlineFun(intx){returnx*x;}D.intFun(intx){inlinereturnx*x;}
3.下面关于重载函数的叙述中正确的是( )
A.重载函数必须具有不同的返回值类型
B.重载函数的形参个数必须不同
C.重载函数必须有不同的形参列表
D.重载函数的函数名可以不同
4.若有定义“intx=17;”,则语句“cout<A.11B.0x11
C.21D.021
5.下列关于析构函数的描述中正确的是( )
A.析构函数可以重载B.析构函数可以是虚函数
C.析构函数名与类名相同D.析构函数的返回类型为void
6.下列关于纯虚函数的描述中,正确的是( )
A.纯虚函数是一种特殊的虚函数,它是个空函数
B.具有纯虚函数的类称为虚基类
C.一个基类中说明有纯虚函数,其派生类一定要实现该纯虚函数
D.具有纯虚函数的类不能创建类对象
7.下列关于运算符重载的描述中,正确的是( )
A.可以改变运算符的目数B.可以改变运算符的优先级
C.可以改变运算符的结合性D.可以改变运算符的功能
8.要将类A说明是类B的虚基类,正确的描述是( )
A.classvirtualB:
publicAB.classB:
virtualpublicA
C.virtualclassB:
publicAD.classB:
publicAvirtual
9.下面关于静态成员的描述中,正确的是( )
A.静态数据成员是类的所有对象共享的数据
B.类的每个对象都有自己的静态数据成员
C.类的不同对象有不同的静态数据成员值
D.静态数据成员不能通过类的对象访问
10.假设Sample是个类,则语句“Samplea[2],*p[3];”调用构造函数的次数为( )
A.0B.2
C.3D.5
二、填空题(本大题共10小题,每小题2分,共20分)
请在每小题的空格中填上正确答案。
错填、不填均无分。
11.在面向对象的程序设计中,将一组对象的共同特性抽象出来形成________________。
12.在C++中要创建一个文件输入流对象fin,同时该对象打开文件“Test.txt”用于输入,则正确的声明语句是________________。
13.如果要把类B的成员函数voidfun()说明为类A的友元函数,则应在类A中加入语句________________。
14.A是一个类,已有语句“A*p;p=newA[10];”。
要释放由p指向的动态空间,正确的语句应该是________________。
15.如果一个引用不是用作函数参数或返回值,则在说明该引用时必须对它进行________________。
16.如果要把PI声明为值为3.14159类型为双精度实数的符号常量,该声明语句是________________。
17.在C++中函数原型不但要标识一个函数的返回类型,同时还要标识该函数的________________。
18.类A的后置自增运算符++以成员函数的形式进行重载,其在类内的函数声明是________________。
19.动态联编是通过基类类型的指针或引用调用________________函数来完成。
20.基类的保护成员通过私有派生其在派生类中的访问权限是________________。
三、改错题(本大题共5小题,每小题2分,共10分)
21.下面的类定义中有一处错误,请用下横线标出错误所在行并给出修改意见。
classSample
{
private:
intdata;
Sample(){data=10;}
public:
Sample(intd){data=d;}
intoperatorint(){returndata;}
};
22.下面的类定义中有一处错误,请用下横线标出错误所在行并给出修改意见。
#include
classPoint
{
intX,Y;
public:
Point(){X=0;Y=0;}
Point(intx=0,inty=0){X=x;Y=y;}
voiddisplay(){cout<};
23.下面的程序有一处错误,请用下横线标出错误所在行并说明错误原因。
#include
template
voidSwap(T&a,T&b)
{
Tt;
t=a,a=b,b=t;
}
voidmain()
{
inta=3,b=4;
charstr1[5]=”abcd”,str2[5]=”hijk”;
Swap(a,b);
Swap(str1,str2);
cout<<”a=”< cout<<”str1=”<}
24.下面的程序有一处错误,请用下横线标出错误所在行并说明错误原因。
#include
classBase
{
public:
virtualvoidfun(){cout<<"Basefunction"<};
classDerived:
publicBase
{
public:
voidfun(){cout<<"Derivedfunction"<};
voidmain()
{
Baseb;
Derived*p=&b;
b.fun();
p->fun();
}
25.下面的程序有一处错误,请用下横线标出错误所在行并说明错误原因。
#include
classA
{
intx;
protected:
inty;
public:
A(intxx,intyy){x=xx;y=yy;}
};
classB:
publicA
{
public:
B(inta,intb):
A(a,b){}
voiddisplay(){cout<};
voidmain()
{
Bb(5,10);
b.display();
}
四、完成程序题(本大题共5小题,每小题4分,共20分)
根据题目要求,完成程序填空。
26.请在下面程序的横线处填上适当内容,以使程序完整,并使程序的输出为:
2,1
4,3
#include
classA
{
inta;
public:
A(inti=0){a=i;}
intGeta(){returna;}
};
classB
{
Aa;
intb;
public:
B(inti=0,intj=0):
① {}
voiddisplay(){cout<};
voidmain()
{
Bb[2]={B(1,2),B(3,4)};
for(inti=0;i<2;i++)
② ;
}
27.下面程序中A是抽象类。
请在下面程序的横线处填上适当内容,以使程序完整,并使程序的输出为:
B1called
B2called
#include
classA
{
public:
① ;
};
classB1:
publicA
{
public:
voiddisplay(){cout<<”B1called”<};
classB2:
publicA
{
public:
voiddisplay(){cout<<”B2called”<};
voidshow(② )
{
p->display();
}
voidmain()
{
B1b1;
B2b2;
A*p[2]={&b1,&b2};
for(inti=0;i<2;i++)
show(p[i]);
}
28.请在下面程序的横线处填上适当内容,以使程序完整,并使程序的输出为:
Name:
王小明
Grade:
90
#include
#include
classPerson
{
charname[20];
public:
Person(char*s){strcpy(name,s);}
voiddisplay(){cout<<”Name:
”<};
classStudent:
publicPerson
{
intgrade;
public:
Student(char*s,intg):
① {grade=g;}
voiddisplay()
{
② ;
cout<<”Grade:
”<}
};
voidmain()
{
Students(“王小明”,90);
s.display();
}
29.请在下面程序的横线处填上适当内容,以使程序完整,并使程序的输出为5。
#include
classInteger
{
intx;
public:
Integer(inta=0){x=a;}
voiddisplay(){cout< ① ;
};
IntegerMax(Integera,Integerb)
{
if(② )
returna;
returnb;
}
voidmain()
{
Integera(3),b(5),c;
c=Max(a,b);
c.display();
}
30.请在下面的横线处填上适当内容,以使类的定义完整。
classArray
{
int*ptr;
intsize;
public:
Array(){size=0;ptr=0;}
Array(intn){size=n;ptr=newint[size];}
Array(① ) //复制初始化构造函数
{
size=a.size;
ptr=newint[size];
for(inti=0;i ② ; //将源对象的动态数组内容复制到目标对象
}
};
五、程序分析题(本大题共6小题,每小题5分,共30分)
阅读下面的程序,写出程序运行的结果。
31.#include
classTest
{
private:
intnum;
public:
Test(intn=0){num=n;num++;}
~Test(){cout<<”Destructorisactive,number=”<};
voidmain()
{
Testx[2];
cout<<”Exitingmain”<}
32.#include
classA
{
public:
virtualvoidfun(intdata){cout<<”classA:
”< voidfun(char*str){cout<<”classA:
”<};
classB:
publicA
{
public:
voidfun(){cout<<”classB”< voidfun(intdata){cout<<”classB:
”< voidfun(char*str){cout<<”classB:
”<};
voidmain()
{
A*pA;
Bb;
pA=&b;
pA->fun
(1);
pA->fun(“Hello”);
}
33.#include
voidmain()
{
cout.fill('*');
cout.width(10);
cout<<"123.45"<cout.width(8);
cout<<"123.45"<cout.width(4);
cout<<"123.45"<}
34.#include
classNum
{
intX,Y;
public:
Num(intx,inty=0){X=x;Y=y;}
voidvalue(intx,inty=0){X=x;Y=y;}
voidvalue(){
cout<if(Y!
=0)
cout<<(Y>0?
’+’:
’-’)<<(Y>0?
Y:
-Y)<<’i’;
cout<}
};
voidmain()
{
Numn
(1);
n.value();
n.value(2,3);
n.value();
Numm(3,-4);
m.value();
}
35.#include
classSample
{
private:
inti;
staticintcount;
public:
Sample();
voiddisplay();
};
Sample:
:
Sample()
{
i=0;
count++;
}
voidSample:
:
display()
{
cout<<"i="<
}
intSample:
:
count=0;
voidmain()
{
Samplea,b;
a.display();
b.display();
}
36.#include
classA
{
inta;
public:
A(intaa=0){a=aa;cout<<"a="<};
classB
{
intb;
public:
B(intbb=0){b=bb;cout<<"b="<
};
classC:
publicB
{
Aa;
public:
C(){cout<<”Cdefaultconstructor”< C(inti,intj):
a(i),B(j){cout<<”Cconstructor”<};
voidmain()
{
Cc1,c2(5,6);
}