19秋学期(1709、1803、1809、1903、1909)《面向对象程序设计》在线作业-0002
试卷总分:100 得分:100
一、单选题 (共 35 道试题,共 70 分)
1.假定MyClass为一类,执行MyClass a,b(2),*p[2];语句时会自动调用该类构造函数()次。
A.5
B.4
C.3
D.2
2.下列虚基类的声明中正确的是( )。
A.virtual class B:public
B.class virtual B:public A
C.class B: virtual public A
D.class B:public A virtual
3.执行语句“string str(“abc”);”时,系统会自动调用string类的构造函数()。
A.string(size_type n, char c)
B.string(const string &str)
C.string(const char *s)
D.string()
4.在保护继承中,基类中的私有成员作为派生类的()。
A.私有成员
B.公有成员
C.保护成员
D.不可访问
5.已知函数原型:void f(int a, int b=3,char c=’*’); 则下面的函数调用中,不合法的调用是()。
A.f(6, , ‘#’)
B.f(5,8)
C.f(5)
D.f(0,0, ‘#’)
6.“#include <iostream>”是()预处理命令。
A.条件编译
B.文件包含
C.工程配置
D.宏定义
7.将一个函数声明为某类的友元函数后,则在函数中不可以直接访问该类的()。
A.都可访问
B.私有成员
C.公有成员
D.保护成员
8.友元运算符obj1>obj2被C++编译器解释为()。
A.operator>(obj1,obj2)
B.obj1.operator(obj2)
C.>(obj1,obj2)
D.jobj2.operator>(obj1)
9.假设有函数模板定义如下: Template Max(T a, T b, T &c) { c=a+b; } 下列选项正确的是( )。
A.int x,y; float z; Max(x,y,z);
B.float x,y,z; Max(x,y,z);
C.float x; int y, z; Max(x,y,z);
D.const int x,y,z; Max(x,y,z);
10.下面关于友元的描述中,错误的是( )。
A.类与类之间的友元关系可以继承
B.友元可以提高程序的运行效率
C.友元函数可以访问该类的私有数据成员
D.一个类的友元类中的成员函数都是这个类的友元函数
11.空类的声明( )是正确的。
A.class类名{};
B.class类名{}
C.class类名;
D.class类名
12.下面对静态数据成员的描述中,正确的是()。
A.静态数据成员可以直接用类名访问
B.静态数据成员可以在类体内进行初始化
C.静态数据成员不能受private控制符的作用
D.静态数据成员不可以被该类的对象调用
13.下面说法中正确的是( )。
A.构造函数可以指定返回类型,而析构函数不能指定任何返回类型,即使是void类型也不可以
B.构造函数与析构函数同名,只要名字前加了一个求反符号(~)
C.一个类只能定义一个析构函数,但可以定义多个构造函数
D.一个类只能定义一个构造函数,但可以定义多个析构函数
14.有关构造函数说法不正确的是( )。
A.构造函数的名字和类的名字一样
B.构造函数有且只有一个
C.构造函数无任何函数类型
D.在创建对象时,系统自动调用构造函数
15.在C++中,通过()的机制可以对原有的类进行扩充和完善以适应新的需要。
A.重载
B.继承
C.封装
D.多态
16.以下为重载函数的一组函数声明的是()。
A.void print(int); void print(double);
B.void mm(); int mm();
C.void fun(int); int fun(int);
D.int max(int,int); int min(int,int);
17.以成员函数方式重载运算符“>”,则obj1>obj2被C++编译器解释为()。
A.operator>(obj1,obj2)
B.obj2.operator>(obj1)
C.obj1.operator>(obj2)
D.>(obj1,obj2)
18.下列关于运算符重载的描述中,()是正确的。
A.运算符重载可以改变结合性
B.运算符重载可以改变操作数的个数
C.运算符重载可以改变优先级
D.运算符重载不可以改变语法结构
19.下列关于类的继承描述中,( )是错误的。
A.继承描述类的层次关系,派生类可以具有与基类相同的属性和方法
B.派生类可以访问基类的所有数据成员,也能调用基类的所有成员函数
C.派生类也是基类,但基类不一定具有派生类的全部属性和方法
D.一个基类可以有多个派生类,一个派生类可以有多个基类
20.下面对构造函数的不正确描述是( )。
A.系统可以提供默认的构造函数
B.构造函数可以重载
C.构造函数可以设置默认参数
D.构造函数可以有参数,所以可以有返回值
21.下列( )不是构造函数的特征。
A.构造函数的函数名与类名相同
B.构造函数必须指定类型说明
C.构造函数可以重载
D.构造函数可以设置默认参数
22.下列关于成员函数特征的描述中,错误的是()。
A.成员函数可以重载
B.成员函数可以设置参数的默认值
C.成员函数可以是静态的
D.成员函数一定是内联函数
23.静态数据成员初始化在()进行,而且前面不加static,以免与一般静态变量或对象相混淆。
A.类体外
B.类体内
C.构造函数内
D.内联函数内
24.下面关于类概念的描述中,( )是错误的。
A.类是抽象数据类型的实现
B.类是创建对象的样板
C.类是具有共同行为的若干对象的统一描述体
D.类就是C语言中的结构体类型
25.关于函数模板,描述错误的是( )。
A.类模板的成员函数都是函数模板
B.函数模板的实例化由编译器实现
C.函数模板必须由程序员实例化为可执行的函数模板
D.一个类定义中,只要有一个函数模板,则这个类是类模板
26.关于对象成员的构造函数的调用顺序,说法正确的是( )。
A.以上说法都不对
B.与析构函数的调用顺序相同
C.与它们在类中说明顺序相同
D.与它们在成员初始化列表中给出的顺序相同
27.用于类中虚成员函数说明的关键字( )。
A.virtual
B.public
C.protected
D.private
28.对于拷贝构造函数,正确的描述是()。
A.必须为每个类定义拷贝构造函数
B.当定义了类的构造函数时,如果要使用拷贝构造函数,则必须定义拷贝构造函数
C.如果要使用拷贝构造函数,则必须在类中先定义
D.在C++语言中,如果不自定义类的拷贝构造函数,则每个类都有默认的拷贝构造函数
29.下面程序段中,说法正确的是( ) class location{ public : int GetX(); }; class rectangle:private location { public: int GetW(); };
A.类rectangle的私有派生类是location
B.类rectangle中的public成员在类 location中是私有的
C.类location中的public成员在类 rectangle中是不可访问的
D.viod f( ) { Rectangle r; int X=r .GetX( ); } 其中int X = r .GetX( );是非法语句
30.静态成员遵循类的其他成员所遵循的访问限制,除了( )。
A.静态数据成员初始化
B.静态成员函数
C.私有静态数据成员
D.公有静态成员函数
31.下列对派生类的描述中,()是错误的。
A.派生类至少有一个基类
B.派生类的成员除了它自己的成员外,包含了它的基类的成员
C.派生类中继承的基类成员的访问权限到派生类保持不变
D.一个派生类可以作另一个派生类的基类
32.在C++标准模板库中,vector容器是一种( )。
A.标准类模板
B.标准类
C.标准对象
D.标准函数
33.在一个C++源文件中使用了cin和cout,那么在这个源文件中必须包含()文件。
A.stdlib.h
B.stdio.h
C.iostream
D.fstream
34.下面叙述错误的是( )。
A.赋值兼容规则也适用于多继承的组合
B.派生类可以使用private派生
C.对基类成员的访问必须是无二义性的
D.基类成员的访问能力在派生类中维持不变
35.已知类X中的一个成员函数说明如下: Void Set(X &a); 其中,X &a的含义是( )。
A.将a的地址传递给Set()函数
B.以上都不对
C.a是指向X类对象的指针,用来作为Set()的形参
D.a是X类对象的引用,用来做为Set()的形参
二、判断题 (共 15 道试题,共 30 分)
36.所谓私有成员是指只有类中所提供的成员函数才能直接使用它们,任何类以外的函数对它们的访问都是非法的。
37.类中所提供的成员函数可以直接访问该类的私有成员。
38.多继承情况下,派生类的构造函数中基类构造函数的执行顺序取决于定义派生类时所指定的各基类的顺序。
39.假定要对类AB定义加号操作符重载成员函数,实现两个AB类对象的加法,并返回相加结果,则该成员函数的声明语句为: AB operator+(AB &,AB &);
40.通过指针或引用可以调用不同对象相同名称的函数,但可导致完全不同的行为的现象称为二义性。
41.类A有如下成员函数: int A::fun(double x){return (int) x/2;} int A::fun(int x){return x*2;} 设a为类A的对象,在主函数中执行语句int s=a.fun(6)+a.fun(2.0)后的s值为13。
42.调试主要是为了解决程序运行时产生的错误。
43.重载的运算符保持原来的优先级和结合性以及操作数的个数。
44.在一个类中声明了某个静态数据成员,并在类外给出其定义和初始化后,若未定义该类的对象,该静态数据成员则不存在。
45.对虚函数的调用,系统都是采用动态联编。
46.cout属于标准输出流,而cerr和clog则不属于标准输出流。
47.getline()函数从流中提取终止字符,但终止字符被丢弃。
48.为了在对象生存期结束时释放其指针成员所指向的动态存储空间,通常需要为该类定义构造函数。
49.含有纯虚函数的类是抽象类。
50.运算符重载的形式有两种:成员函数形式和友元形式。