一、单项选择题 ( 在每小题的四个备选答案中选出一个正确答案,并将其号码填在题干的括号内。每小题 2 分,共 20 分 )
1. 所谓数据封装就是将一组数据和与这组数据有关操作组装在一起,形成一个实体,这实体也就是 ( )
A. 类 B. 对象 C. 函数体 D. 数据块
2. 面向对象的程序设计语言必须具备的关键要素是 ( )
A. 抽象和封装 B. 抽象和多态性
C. 抽象、封装、继承和多态性 D. 抽象、封装和继承性
3. 类的构造函数被自动调用执行的情况是在定义该类的 ( )
A. 成员函数时 B. 数据成员时
C. 对象时 D. 友元函数时
4. 设有函数模板
template
Q Sum(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. 在下面的类定义中,私有成员有 _________ 。
class Location {
int X,Y;
protected:
int zeroX,zerxY;
int SetZero(intzeroX, intzeroY);
private:
int length,height;
public:
void init(int initX,int initY);
int GetX();
int GetY();
};
20. 类的私有成员只能被它的成员函数和 _________ 访问。
三、改错题 ( 每小题 2 分,共 10 分 )
21. 此类定义有一处错误,请指出错误并改正。
class ABC{
int a;
public:
ABC(int aa)a(aa){}
};
22. 下面程序通过调用函数模板实现计算两个正整数的最大公约数,把 main 函数中错误找出并改正过来。
#include
template
T gcd(Tx,Ty){
while(x! =y)
if(x>y)x-=y;
else y-=x;
return x;
}
void main()
{
int a;
double d;
cin>>a>>d;
cout<}
23. 指出下面程序中的错误,并说明出错原因。
#include
class ConstFun{
public:
void ConstFun(){}
const int f5()const{return 5;}
int Obj() {return 45;}
int val;
int f8();
};
int ConstFun::f8(){return val;}
void main()
{
const ConstFun s;
int i=s.f5();
cout<< ″ Value= ″ <}
24. 指出下面程序中的错误,并说明错误原因。
#include
class A{
public:void fun(){cout<< ″ a.fun ″ <};
class B{
public:void fun(){cout<< ″ b.fun ″ <void gun(){cout<< ″ b.gun ″ <};
class C:public A,public B{
private:int b;
public:void gun(){cout << ″ c.gun<< ″ endl;}
};
void main(){
c obj;
obj.fun();
obj.gun();
}
25. 指出下面程序段中的错误,并说明出错原因。
class Location {
int X,Y;
protected:
int zeroX,zeroY;
int SetZero(int zeroX,int zeroY){X=zeroX;Y=zeroY;}
private:
int length,height;
public:
float radius;
void init(int initX,int initY){length=initX;height=initY;}
int GetX(){return X;}
int GetY(){return Y;}
};
int main(){
Location retangleA={25,20,3,5,6,7,3};
return 0;
}
四、完成程序题 ( 每小题 4 分,共 20 分 ) 根据题目要求填空,完成程序。
26. 在下面程序段横线处填上适当的内容。
class A{
________
int n;
public:
A(int nn=0):n(nn){
if(n==0)a=0;
else a=new int [ n ] ;
}
________// 定义析构函数,释放动态数组空间
};
27. 在下面程序横线处填上适当内容,使程序执行结果为:
200_ _ 100
程序如下:
#include
template ________
Tf(Tx,Ty){
if(sizeof(T)==__________)
return x+y;
else
return x*y;
}
void main(){
cout <}
28. 下面程序三次调用同一函数 sum ,在横线处填上适当内容,使输出结果为:
S=2
S=5
S=9
程序如下:
#include
void sum(int i)
{
static int s;
____________;
cout<< ″ S= ″ <}
void main (void)
{
int i;
for (i=0;________)
sum(i);
}
29. 请在下面横线处填上适当的内容,使程序的输出为:
7.00000
7
程序如下:
#include
viod main(){
double x=7;
cout<<______________<cout<}
30. 在下面程序横线处填上适当的内容,使该程序输出结果为:
Creating B
end of B
end of A
程序如下:
#include
class A
{
public:
A(){}
______________{cout<< ″ end of A ″ <};
calss B:public A
{
public:
B(){________}
~ B(){cout<< ″ end of B ″ <};
void main()
{
A*pa=new B;
delete pa
}
五、程序分析题 ( 每小题 5 分,共 30 分 )
给出下面各程序的输出结果。
31. 当从键盘上输入 1.5 10 时,写出下面程序的执行结果。
#include
void mian()
{
int a,b,c;
char ch;
cin>>a>>ch>>b>>c;// 从键盘上输入 1.5 10
cout<
}
输出为:
32. 写出下面程序输出结果。
#include
template
void f(T a [ 3 ][ 3 ] ,Tb [ 3 ][ 3 ] ,Tc [ 3 ][ 3 ] )
{
for(int i=0;i<3;i++)
for(int j=0;j<3;j++){
c [ i ][ j ] =(T)0
for(int k=0;k<3;k++)
c [ i ][ j ] +=a [ i ][ k ] *b [ j ][ k ] ;
}
}
void main()
{
int a [ 3 ][ 3 ] ={{1,2,3},{4,5,6},{7}},b [ 3 ][ 3 ],
c [ 3 ][ 3 ] ={{2},{0,2},{0,0,2}};
f(a,c,b);
for(int i=0;i<3;i++){
for(int j=0,j<3;j++)
cout<cout<}
}
输出为:
33. 写出下面程序的输出结果。
#include
class FUN{
friend ostream& operator <<(ostream&,FUN);
}fun;
ostream& operator<<(ostream& os,FUN f){
os.setf(ios::left);
return os;
}
void main()
{
cout<cout<}
输出为:
34. 写出下面程序的输出结果。
#include
class Test{
private:
static int val;
int a;
public:
static int func();
static void sfunc(Test &r);
};
int Test::val=20;
int Test::func()
{
val--;
return val;
}
void Test::sfunc(Test &r)
{
r.a=25;
cout<< ″ Result3 ″ =<}
void main()
{
cout<< ″ Resultl= ″ <Test a;
cout<< ″ Result2= ″ <
Test::sfunc(a);
}
输出为:
35. 写出下面程序输出结果。
# include
class A
{
public:
virtual void func(){cout<< ″ func in class A ″ << endl;}
};
class B
{
public:
virtual void func(){cout<< ″ func in class B ″ << endl;}
};
class C:public A, public B
{
public:
void func(){cout<< ″ func in class C ″ <};
void main()
{
C c;
A& pa=c;
B& pb=c;
C& pc=c;
pa.func();
pb.func();
pv.func();
}
输出为:
36. 写出下面程序的输出结果。
# include
class Location{
public:
int X,Y;
void init(int initX,int initY);
int GetX();
int GetY();
};
void Location::init (int initX,int initY)
X=initX;
Y=initY;
}
int Location::GetX()
{
return X;
}
int Location:GetY()
{
return Y;
}
void display(Location& rL)
{
cout<}
void main()
{
Location A [ 5 ] ={{0,0},{1,1},{2,2},{3,3},{4,4}};
Location *rA=A;
A [ 3 ] .init(5,3);
rA->init(7,8);
for (int i=0;i<5;i++)
display(*(rA++));
}
输出为:
上一篇文章: 计算机技术与软件水平考试面向对象程序设计试题(4)
下一篇文章: 计算机技术与软件水平考试面向对象程序设计试题(6)
【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】