2009-2010学年第二学期
计算机系《面向对象程序设计C++》期末考试试卷(B卷)
一、填空题
1.在说明引用时用const修饰的引用为 常引用,它所引用的对象不允许更改。
2.信息隐藏是指将对象的 数据和操作 隐藏起来的技术。
3.运行时多态性主要是通过 虚函数 来实现的。
4.类的对象成员的构造函数的调用次序取决于这些对象成员 在类中声明 的次序,与它们在初始化列表中出现的次序无关。
5.拷贝构造函数是一种特殊的构造函数,其形参是本类对象的引用;其作用是使用一个已经存在的对象去初始化另一个同类的对象。
6.在C++中,可以通过在运算符函数参数表中是否插入关键字int来区分前缀和后缀这两种方式。
7.构造函数 是一种特殊的成员函数,它主要用来为对象分配内存空间,对类的数据成员进行初始化并执行对象的其他内部管理操作。
8.如果在一个类中说明了常数据成员,那么构造函数就只能通过成员初始化列表对该数据成员进行初始化, 任何其他函数都不能对该成员赋值。
9.联编是指将函数调用与相应函数体代码彼此关联的过程。若此过程在程序开始运行前的编译时完成,则称之为 静态 联编。
10.一个非成员函数必须声明为一个类的 friend 才有可能存取该类的私有数据成员。
二、判断题
1.如果类中含有指针类型的数据,深拷贝就会产生错误。 (╳)
2. 类模板不是代表一个具体的、实际的类, 而是代表着一类类。 (√)
3. 常常用将类的下标运算符 [ ] 重载为友元函数。 (╳)
4. 类类型转换函数既没有参数, 也不显式给出返回类型。 (√)
5. 动态联编在程序运行阶段完成的联编。 (√)
6. 编译时多态性主要是通过函数重载和运算符重载实现的。 (√)
7. C++中的类属关系运算符“.”也可以重载。 (╳)
8. 构造函数的名字必须与类名相同,其返回类型缺省为void类型。 (╳)
9. 允许将一个声明为指向派生类对象的指针指向其基类的一个对象。 (╳)
10. 常对象只能调用它的常成员函数, 而不能调用普通的成员函数。 (√)
三、选择题:
1.有关运算符重载正确的是( D )
A)C++语言允许在重载运算符时改变运算符的操作个数
B)C++语言允许在重载运算符时改变运算符的优先级
C)C++语言允许在重载运算符时改变运算符的结合性
D) C++语言允许在重载运算符时改变运算符的原来的功能
2. 类的析构函数的作用是( D )
A)一般成员函数 B)类的初始化 C)对象的初始化 D)删除类创建的所有对象
3. 什么样的成员函数不能修改数据成员?( C )
A) 私有成员函数 B)公有成员函数 C)常量成员函数 D)所有成员函数
4. 可以被对象之外访问的成员是( B )
A) 私有成员函数 B) 公有成员函数 C) 常量成员函数 D) 所有成员函数
5. 类的实例化是指( A )
A) 创建类对象 B) 定义类 C)调用类的成员 D)指明具体的类
6. 要实现动态联编,派生类中的虚函数( D )
A)返回的类型可以与虚函数的原型不同
B)参数个数可以与虚函数的原型不同
C)参数类型可以与虚函数的原型不同
D) 以上都不对
7. 类的构造函数是在什么时间被自动调用的?( B )
A)类创建时 B)创建对象时 C)删除对象时 D)不自动调用
8. 多重继承是( B )。
A) 多个单一继承的叠加 B) 导出类有多个直接基类
指向类成员函数的指针C) 多个导出类有唯一的基类
D) 每个导出类最多只有一个直接基类,但它可以有多个间接基类
9、C++对C语言作了很多改进,下列描述中( D )使得C语言发生了质变,即从面向过程变成了面向对象。
A) 增加了一些新的运算符 B) 允许函数重载,并允许设置默认参数
C) 规定函数说明必须用原型 D) 引进了类和对象的概念
10. 关于虚函数,正确的描述是( A )
A) 构造函数不能是虚函数 B) 析构函数不能是虚函数
C) 虚函数可以是友元函数 D) 虚函数可以是静态成员函数
一、选择题(每小题3分,共48分。)
01、下列关于C++函数的叙述中,正确的是( C )。
A)每个函数至少要具有一个参数 B)每个函数都必须返回一个值
C)函数在被调用之前必须先声明 D)函数不能自己调用自己
02、下列关于类和对象的叙述中,错误的是( A )。
A)一个类只能有一个对象 B)对象是类的具体实例
C)类是对某一类对象的抽象 D)类和对象的关系是一种数据类型与变量的关系
03、在C++中,用于实现运行时多态性的是( D )。
A)内联函数 B)重载函数 C)模板函数 D)虚函数
04、下列关于运算符重载的叙述中,正确的是( B )。
A)通过运算符重载,可以定义新的运算符 B)有的运算符只能作为成员函数重载
C)若重载运算符+,则相应的运算符函数名是+ D)重载二元运算符时,必须声明两个形参
05、对于语句 cout<<x<<endl;错误的是描述是( D )。
A)“cout”是一个输出流对象 B)“endl”的作用是输出回车换行
C)“x”是一个变量 D)“<<”称作提取运算符
06、有如下类声明,则类MyDERIVED中保护的数据成员和成员函数的个数是( B )。
class MyBASE
{ private: int k;
public: void set(int n){ k=n;}
int get( )const{ return k;} };
class MyDERIVED: protected MyBASE
{ protected: int j;
public: void set(int m, int n){ MyBASE::set(m); j=n;}
int get( ) const { return MyBASE::get( )+j; } };
A)4 B)3 C)2 D)1
07、已知在一个类体中包含如下函数原型: Volume operator-(Volume)const;,下列关于这个函数的叙述中,错误的是( B )。
A)这是运算符-的重载运算符函数 B)这个函数所重载的运算符是一个一元运算符
C)这是一个成员函数 D)这个函数不改变类的任何数据成员的值
08、执行如下的程序段后,输出结果是( A )。
cout.fill('*'); cout.width(6); cout.fill('#'); cout << 123 << endl;
A)###123 B)123### C)***123 D)123***
09、在下列函数原型中,可以作为类AA构造函数的是( D )。
A)void AA(int); B)int AA(); C)AA(int)const; D)AA(int);
10、下面四个选项中,( A )是用来声明虚函数的。
A)virtual B)public C)include D)using namespace
11、实现运行时的多态性要使用( D )。
A)重载函数 B)构造函数 C)析构函数 D)虚函数
12、要实现动态联编,必须通过( A )调用虚函数。
A)对象指针 B)成员名限定 C)对象名 D)派生类名
13、以下( C )成员函数表示纯虚函数。
A)virtual int vf(int); B)void vf(int)=0;
C)virtual void vf()=0; D)virtual void vf(int){}
14、有如下类声明:class XA
{ private: int x;
public: XA(int n){ x=n;} };
class XB: public XA
{ private: int y;
public: XB(int a,int b); };
在构造函数XB的下列定义中,正确的是(B )。
A)XB::XB(int a,int b): x(a),y(b){ } B)XB::XB(int a,int b): XA(a),y(b){ }
C)XB::XB(int a,int b): x(a),XB(b){ } D)XB::XB(int a,int b): XA(a),XB(b){ }
15、在表达式 x+y*z中, + 是作为成员函数重载的运算符,* 是作为非成员函数重载的运算符。则 operator+ 有 个参数,operator* 有 参数。(C )
A)2、2 B)2、1 C)1、2 D)1、1
16、应在下列程序划线处填入的正确语句是( C )。
class Base
{ public:
void fun(){cout<<"Base::fun"<<endl;} };
class Derived:public Base
{ void fun()
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论