内容摘要:面向对象程序设计试题及参考答案
一、单项选择题 ( 本大题共 10 小题,每小题 2 分,共 20 分 ) 在每小题列出的四个选项中只有一个选项是符合题目要求的,请将其代码填在题后的括号内。错选或未选均无分。
1. 在 C++ 中,函数原型不能标识 ( )
A. 函数的返回类型 B. 函数参数的个数
C. 函数参数类型 D. 函数的功能
2. 在 C++ 程序中,对象之间的相互通信通过 ( )
A. 继承实现 B. 调用成员函数实现
C. 封装实现 D. 函数重载实现
3. 对于任意一个类,析构函数的个数最多为 ( )
A.0 B.1 C.2 D.3
4. 下面函数模板定义中不正确的是( )
A.template B.template
QF(Qx){ QF(Qx){
return Q+x; return x+x;
} }
C.template D.template
TF(Tx){ TF(Tx){
return x*x; return x>1;
} }
5. 友元关系不能 ( )
A. 继承
B. 是类与类的关系
C. 是一个类的成员函数与另一个类的关系
D. 提高程序的运行效率
6. 语句 ofstream f( ″ 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. 对于类定义
class A{
public:
virtual void func1( ){ }
void func2( ){ }
};
class B:public A{
public:
void func1( ){cout<< ″ class B func 1 ″ 下面正确的叙述是 ( )
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++ 中语句 const char * const p= ″ hello ″;所定义的指针 p 和它所指的内容都不能被 _________ 。
17. 假定 AB 为一个类,则语句 AB(AB&x) ;为该类 _________ 构造函数的原型说明。
18. 将关键字 const 写在成员函数的 _________ 和 _________ 之间时,所修饰的是 this 指针。
19. 在 C++ 中,访问一个对象的成员所用的运算符是 _________ ,访问一个指针所指向的对象的成员所用的运算符是 _________ 。
20. 派生类从一个或多个以前定义的该类的 _________ 继承数据和函数。
三、改错题 ( 本大题共 5 小题,每小题 2 分,共 10 分 )
21. 指出下面程序段中的错误,并说明出错原因。
class A{
int a,b;
public :
A(int aa,int bb) {a=aa;b=bb;}
};
Ax(2,3),y(4);
22. 指出并改正下面利用类模板的对象定义中的错误。
template
class Tany{
T x,y;
public:
Tany(T a,T b){x=a,y=b;}
T sum( ){return x+y;}
};
Tany (int) obj(10,100);
23. 指出下面程序段中的错误,并说明出错原因。
class one{
private:
int a;
public:
void func(two&);
};
class two{
private:
int b;
friend void one::func(two&);
};
void one::func(two& r)
{
a=r.b;
}
24. 指出下面程序段中的错误,并说明出错原因。
# include
class A{
public: void fun( ){cout<< ″ a.fun ″ <};
class B{
public: void fun( ){cout<< ″ b.fun ″ class C:public A,public B{
private:int b;
public:void gun( ){cout<< ″ c.gun ″ };
25. 指出下面程序段中的错误,并说明出错原因。
class Location {
int X,Y=20;
protected:
int zeroX,zeroY;
int SetZero(int ZeroX,int ZeroY);
private:
int length,height;
public:
float radius;
void init(int initX,int initY);
int GetX( );
int GetY( );
};