地大《面向对象程序设计(新)》在线作业一-0008
试卷总分:100 得分:100
一、单选题 (共 15 道试题,共 60 分)
1.有如下定义:int a[5]={1,3,5,7,9},*p=a;下列表达式中不能得到数值5 的是()
A.*p+4
B.*(p+2)
C.a[3]
D.a[2]
2.设int * p2=&x,* p1=a;p2= *b;则a和b的类型分别是()
A.int 和int *
B.int * 和int **
C.int * 和int *
D.int * 和int
3.下列关于虚基类的描述,错误的是()
A.设置虚基类的目的是为了消除二义性
B.虚基类的构造函数在非虚基类之后调用
C.若虚基类由非虚基类派生而来,则仍然先调用基类构造函数,再调用派生类的构造函数
D.若同一层中包含多个虚基类,这些虚基类的构造函数按它们说明的次序调用
4.有如下类声明:class Base{protected;int amount;public;Base(int n=0): amount(n){}int getAmount()const { retum amount; }};class Derived: public Base {protected;int value;public;Derived(int m, int n): value(m). Base(n){}Int getData()const{ return value+amount; }};已知
A.x.value+ x.getAmount()
B.x.value+x.amount
C.x.getData()-x.gctAmount()
D.x.getData()-x.amount
5.下面是一个模板声明的开始部分:templute<typename T> double __由此可知()
A.这肯定是一个错误的模板声明
B.这既可能是一个函数模板的声明,也可能是一个类模板的声明
C.这可能是一个类模板的声明
D.这可能是一个函数模板的声明
6.在类的定义中,用于为对象分配内存空间,对类的数据成员进行初始化并执行其他内部管理操作的函数是()
A.虚函数
B.析构函数
C.构造函数
D.友元函数
7.假定要对类AB定义加号操作符重载成员函数,实现两个AB类对象的加法,并返回相加结果,则该成员函数的声明语句为()
A.operator+(AB a)
B.AB operator+(AB & a , AB & b)
C.AB operator+(AB & a)
D.AB & operator+( )
8.类的析构函数的作用是()
A.类的初始化
B.对象的初始化
C.删除类创建的对象
D.一般成员函数的初始化
9.设int f(int);和int g(int);是函数f和g的原形,以下将f作为语句调用的是()
A.p= f(g(3)+1);
B.g(f(3)+2);
C.g(f(3));
D.f(g(3));
10.有如下程序: #include class BASE{ char c; public: BASE(char n):c(n){} virtual~BASE(){cout<<C;} }; class DERIVED:public BASE{ char c; public: DERIVED(char n):BASE(n+1),c(n){} ~DERIVED(){cout
A.YX
B.Y
C.XY
D.X
11.下面描述中,表达错误的是()
A.私有继承时基类中的public成员在派生类中是private的
B.公有继承是基类中的private成员在派生类中仍是private的
C.公有继承时基类中的public成员在派生类中仍是public的
D.公有继承时基类中的protected成员在派生类中仍是protected的
12.对于全局函数 int f(void) ,与其完全等价的函数原型为()
A.int f(void ) const;
B.int& f( );
C.const int f( );
D.B、C都不是
13.类TM和类TN是两个独立的类,那么类TM中哪种形式的数据成员一定是不允许的()
A.TN& a;
B.TN a;
C.TM* a;
D.TM a;
14.在C++语言中,数据封装要解决的问题是()
A.防止不同模块之间数据的非法访问
B.避免数据丢失
C.数据的规范化
D.便于数据转换
15.已知Value 是一个类,Value 是Value 的一个对象。下列以非成员函数形式重载的运算符函数原形中,正确的是()
A.Value operator+(Value v=value, int i=0);
B.Value operator+(Value v=value, int i);
C.Value operator+(Value vint i=0);
D.Value operator+(Value v, int i);
二、多选题 (共 5 道试题,共 20 分)
16.赋值运算符重载函数与拷贝构造函数的区别是什么()
A.都是拷贝一个类的对象给另一个同类型的类的对象
B.赋值运算符重载函数要把一个已存在对象的各成员的当前值赋给另一个已存在的同类对象
C.拷贝构造函数是用已存在的对象的各成员的当前值来创建一个相同的新对象
17.关于构造函数说法正确的是()
A.返回类型可以是任意的
B.在对象创建时自动调用
C.参数个数和类型可以是任意的
D.函数名只能是类名
18.下列有关抽象类和纯虚函数的叙述中,错误的是()
A.纯虚函数都不能有函数体
B.纯虚函数的声明以“=0;”结束
C.拥有纯虚函数的类是抽象类,能用来定义对象
D.抽象类的派生类若不实现纯虚函数,它也是抽象类
19.以下哪些是面向对象程序设计的特征( )
A.继承
B.抽象
C.封装
D.多态
20.关于公共静态数据成员,下面说法正确的是()
A.需要在类体外初始化
B.跟某个具体对象无关
C.在main函数之前创建
D.可以用类名和成员名直接访问
三、判断题 (共 5 道试题,共 20 分)
21.多态的实现分为两类:编译时的多态和运行时的多态
22.默认的继承方式是private
23.友元函数的声明不受访问区域的影响
24.设int * p;则可以定义表达式 –++p
25.静态成员变量所有的对象拥有一份拷贝