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小时内删除。