24春学期(高起本:1709-2103、专升本/高起专:2003-2103)《面向对象程序设计》在线作业-00002
试卷总分:100 得分:100
一、单选题 (共 35 道试题,共 70 分)
1.类A是类B的友元,类B是类C的友元,则( )是正确的。
A.类B是类A的友元
B.类C是类A的友元
C.类A是类C的友元
D.以上都不对
2.下列对派生类的描述中错误的是()。
A.派生类至少有一个基类
B.派生类可作为另一个派生类的基类
C.派生类除了包含它直接定义的成员外,还包含其基类的成员
D.派生类对其继承的基类的成员访问权限保持不变
8.下列关于拷贝构造函数的描述中,错误的是()。
A.一个类可以定义多个拷贝构造函数
B.若未定义拷贝构造函数,则系统会提供一个默认拷贝构造函数
C.当类中有指针成员变量时,通常要为这个类定义一个拷贝构造函数来实现深拷贝
D.拷贝构造函数中的参数按引用方式传递
4.友元重载运算符obj1>obj2被C++编译器解释为()。
A.operator>(obj1,obj2)
B.>(obj1,obj2)
C.obj1.operator>(obj2)
D.obj2.operator>(obj1)
5.对A、B两个类进行多重继承得到派生类C,则创建派生类C的对象时,从基类B中继承过来的成员变量由()类的构造函数进行初始化。
A.A
B.B
C.C
D.都可以
6.下列关于动态联编的描述中,错误的是()。
A.动态联编是以虚函数为基础的
B.动态联编是在运行时确定所调用的函数代码的
C.动态联编调用函数操作是通过指向对象的指针或对象
D.动态联编是在编译时确定操作函数的
7.如果类A被说明成类B的友元,则()。
A.类A的成员函数不得访问类B的所有成员
B.类A的成员函数可以访问类B的所有成员
C.类A的成员即类B的成员
D.类B的成员即类A的成员
9.下面( )的叙述不符合赋值兼容规则。
A.派生类的对象可以赋值给基类的对象
B.基类的对象可以赋值给派生类的对象
C.派生类的对象可以初始化基类的对象
D.派生类的对象的地址可以赋值给指向基类的指针
9.()是一个在基类中说明虚函数,它在该基类中没有定义,但要求任何派生类中的可访问性的规定是相同的。
A.纯虚函数
B.虚析构函数
C.虚构造函数
D.静态成员函数
10.对于拷贝构造函数,正确的描述是()。
A.在C++语言中,如果不自定义类的拷贝构造函数,则每个类都有默认的拷贝构造函数
B.必须为每个类定义拷贝构造函数
C.如果要使用拷贝构造函数,则必须在类中先定义
D.当定义了类的构造函数时,如果要使用拷贝构造函数,则必须定义拷贝构造函数
11.对定义重载函数的下列要求中,( )是错误的。
A.要求参数的个数不同
B.要求参数中至少有一个类型不同
C.要求参数个数相同时,参数类型不同
D.要求函数的返回值不同
12.若析构函数是虚函数,则delete对析构函数的调用采用( )。
A.静态联编
B.动态联编
C.重载函数
D.多重函数
13.友元访问类对象的成员时使用( )。
A.类的成员名
B.“this->成员名”的形式
C.“类名::成员名”的形式
D.“对象名.成员名”的形式
14.已知“int a=10,b=8;int &r=a; r=b;cout<<a<<","<<b<<","<<r;”,则输出为()。
A.10,8,10
B.10,8,8
C.8,8,10
D.8,8,8
15.结构化程序设计方法以()为中心进行分析和设计。
A.结构
B.模块
C.对象
D.类
16.若定义cin>>str;当输入 Microsoft Visual Studio 6.0! 所得的结果是str= ()。
A.Microsoft Visual Studio 6.0!
B.Microsoft
C.Microsoft Visual
D.Microsoft Visual Studio 6.0
17.假设堆内存分配均成功,则下面程序段完全正确的是()。
A.int *p=new int(3);cout<<*p;delete p;
B.int *p=new int[5]={1,2,3,4,5};for(int i=0;i<5;i++)cout<<p[i];delete []p;
C.int *p=new int[5];for(int i=0;i<5;i++,p++) {*p=i; cout<<*p;}delete []p;
D.以上程序段均正确
10.已知类X中的一个成员函数说明如下: Void Set(X &a); 其中,X &a的含义是( )。
A.a是指向X类对象的指针,用来作为Set()的形参
B.将a的地址传递给Set()函数
C.a是X类对象的引用,用来做为Set()的形参
D.以上都不对
19.已知X类.则当程序执行到语句X *array[3];时,调用了( )次构造函数。
A.3
B.2
C.1
D.0
33.动态联编所支持的多态性是( )。
A.虚函数
B.继承
C.编译时的多态性
D.运行时的多态性
21.基类和派生类可以分别叫做( )。
A.“大类”和“小类”
B.“父类”和“子类”
C.“小类”和“大类”
D.“子类”和“父类”
22.下列关于构造函数说法不正确的是()。
A.构造函数必须与类同名
B.构造函数可以省略不写
C.构造函数必须有返回值
D.在构造函数中可以对类中的成员进行初始化
23.有关类和对象的说法不正确的是( )。
A.对象是类的一个实例
B.一个类只能有一个对象
C.任何一个对象只能属于一个具体的类
D.类与对象的关系和数据类型和变量的关系相似
24.实现运行时的多态性要使用()。
A.构造函数
B.析构函数
C.重载函数
D.虚函数
25.类MyClass的定义如下: class MyClass { public: MyClass() { value = 0;} SetVariable(int i) { value = i; } private: int value; } 则对下列语句序列正确的描述是()。 MyClass *p,my; p=&my;
A.语句p=&my;是把对象my赋值给指针变量p
B.语句MyClass *p,my;会调用两次类MyClass的构造函数
C.对语句 *p.SetVariable(5)的调用是正确的
D.语句p->SetVariable(5)与语句my.SetVariable(5)等价
26.若派生类中没有对基类的虚函数进行重定义,则它继承基类中的( )。
A.访问权限
B.保护成员
C.虚函数
D.成员函数
27.在一个string类对象表示的字符串中查找子串,应该使用string类的()函数。
A.assign
B.insert
C.swap
D.find
28.通常拷贝构造函数的参数表是( )。
A.某个对象名
B.某个对象的成员名
C.某个对象的引用名
D.某个对象的指针名
16.假定MyClass为一类,执行MyClass a,b(2),*p[2];语句时会自动调用该类构造函数()次。
A.2
B.3
C.4
D.5
1.( )是析构函数的特征。
A.析构函数可以有一个或多个参数
B.析构函数定义只能在类体内
C.析构函数名与类名不同
D.一个类中只能定义一个析构函数
31.下列引用的定义中,( )是错误的。
A.int i; int &j=i;
B.int i; int &j; j=i;
C.float i; float &j=i;
D.char d; char &k=d;
32.若派生类的成员函数不能直接访问基类中继承来的某个成员,则该成员一定是基类中的(??)。
A.私有成员
B.公有成员
C.保护成员
D.保护成员或私有成员
33.类模板的模板参数( )。
A.只可作为数据成员的类型
B.只可作为成员函数的返回类型
C.只可作为成员函数的参数类型
D.以上三者皆可
34.在C++中,通过()的机制可以对原有的类进行扩充和完善以适应新的需要。
A.继承
B.封装
C.多态
D.重载
35.如果一个类至少有一个纯虚函数,那么就称该类是()。
A.抽象类
B.虚基类
C.派生类
D.以上都不对
二、判断题 (共 15 道试题,共 30 分)
49.以app方式打开文件时,当前的读指针和写指针都定位于文件尾。
37.已知Circle类对象c,Circle类中有一个setCenter成员函数,如果c.setCenter(...)返回值仍然是c,则setCenter函数中的return语句应写作return this;。
38.在面向对象程序设计中,每个对象可以单独设置属性值。
39.使用关闭文件函数close()关闭一个文件时,但流对象仍存在。
40.类的常量数据成员只能在常量成员函数中使用。
41.在成员函数的函数类型前加上const关键字,则该成员函数就是常量成员函数。
42.析构函数不能被继承。
43.构造函数和析构函数均不能被说明为虚函数。
44.在公有继承中,基类中只有公有成员对派生类对象是可见的。
45.派生类至少有一个基类。
46.假定用户没有给一个名为AB的类定义析构函数,则系统自动给出的缺省析构函数定义为~AB(){ }。
47.使用模板可以减少重复劳动,提高代码重用率。
48.具有纯虚函数的类是抽象类,它的特点是不可以定义对象。
49.C++语言类定义中默认的访问权限是public。
50.一个函数模板只生成一个模板函数。