-
一、单选题(每题
1
分,共
10
分)
1
.假定
AB
为一个类,则执行“
A
B
a(4) , b[3] , * p[2]
”语句
时,自动调用该类构造函数
的次数为
(
B
)
。
A. 3
B. 4
C. 6
D. 9
2.
假定要对类
AB
定义加号操作符重载成员函数,实现两个
A
B
类对象的加法,并返回相加
结果,则该成员函数的声明语句为
:
(
B
)
。
A.
AB
operator+(AB
& a , AB
& b)
B.
AB
operator+(AB
& a)
C.
operator+(AB
a)
D.
AB
&
operator+( )
3.
关于
virtual void Draw()=0
,下面说法正确的有几个(
C
)
< br>
(1)
它是纯虚函数
(
对
)
(2)
p>
它在定义它的类中不能实现
(
对
)
(3)
定义它的类不可实例化
(
对
)
(4)
如果一个类要继承一个
ADT
类,必须要实现其中的
所有纯虚函数
(
错
)//
可以不实现
,
派生
之后的类
仍旧作为一个抽象类
.
A. 1
B. 2
C. 3
D. 4
4.
stl::deque
是一种什么数据类型?
(
A
)
A.
动态数组
B.
链表
C.
堆栈
D.
树
5.
下列关于构造函数的描述中,错
误的是(
d
)
??A)
构造函数可以设置默认参数;
B)
构造函数在定义类对象时自动执行
??C)
构造函数可以是内联函数;
D)
构造函数不可以重载
6. C++
类体系中,不能被派生类继承的有(
b
)
。
A
、
转换函数
B
、
构造函数
C
、
虚函数
D
、
静态成员函数
??
7
、每个类(
c
)构造函数。
A
、只能有一个
B
、只可有公有的
C
、可以有多个
D
、只可有缺省的
8
、当类中有私有成员的时候,重载赋值操作符时,应声明为(
a
)函数。
A
、
友元
B
、
虚
C
、
成员
D
、
多态
9
、在公有继承的情况下,基类成员在派生类中的访问权限(
b
)
A
、
受限制
B
、
保持不变
C
、
受保护
D
、
不受保护
10
、通过(
a
)调用虚函数时,采用动态绑定。
A
、
对象指针
B
、
对象名
C
、
成员名限定
D
、
派生类名
二、多选题(每个
2
分,共
10
分)
1
、下列哪些写法是对的,而且是常量。
(
ABCEGH
正确,
D
错误
)
A 125
B -.456
C 1.25e20
D 'AB'
E E6 F 0238 G 0xabcdef H
2.
下面哪些运算符不能被重载?
(
ABD
)
A.
做用域运算符“
::
”
B.
对象成员运算
符“
.
”
C.
指针成员运算符“
->
”
D.
三目运算符“
?
:
”
3.
以下说法正确的是?
(
ABC
)
A.
头文件中的
ifndef/define/endif
是为了防止该头文件被重复引用。
B.
对于
#include
,编译器从标准库路径开始搜索
filename.h
对于
#include
“
filename.h
”
,编译器从用户的工作路径开始搜索
filename.h
C.
C++
语言支持函数重载,
C
语言不支持函数
重载。函数被
C++
编译后在库中的名字与
C
语言的不同。
D.
fopen
函数只是把文件目录信息调入内存。
4.
vector::iterator
重载了下面哪些运算符?
(
ACD
)
A. ++
B. >>
C. *
(前置)
D. ==
5
.已知系统中已定义函数
fp,
其原形是:
int
fp(char c,int k=0,double d=100.0);
则下列函数中可以加以重载的是(
AD
)
。
fp();
fp(char c);
fp(char,int);
fp(char,int,int);
原因如下:
int
k=0,double d=100.0
上面的形式已经指定
后两个参数等于可以省略
所以
fp
可
以有
3
钟调用方式:
fp(c)---> fp(char)
fp(c,k)---> fp(char int)
fp(c,k,d) ---> fp(char int
double)
A
没有用到可以重载
D
的最后参数是
int,
可以重载
三、填空题(
每个
1
分,共
15
分)
1. new
和
__
delete_
__
对应,
malloc
和
_
fre
e___
对应,
他们
之间
_
不能
__
交叉混用。
calloc
的功
能是
_
_
动态分配内存,并初始化数值为<
/p>
0
___
,
re
alloc
的功能是
_
改变原有内存区
域的大小
_
。
2.
C++
的特性有
(抽象、封装、继承、多态性)
< br>3.
在用
class
定义一个类
时,数据成员和成员函数的默认访问权限是
private
4.
含有纯虚函数的类称为
抽象基类
5.
已知
int DBL(int
n){return n + n;}
和
long
DBL(long n){return n+n;}
是一个函数模
板的两个实例,则该函数模板的定义是
template
return n+n;}
6.
定义重载函数时,应在
参数的数量
和
类型
有所不同
。
7
当建立一个新对象时,程序自动调用
类的构造函数
。
四、判断题(每个
1
分,共
10
分)
(
1
)函数体内声明
的静态变量,至多只会被初始化一次。
r
(
2
p>
)对于同一个类中的两个非静态成员函数,它们的函数的名称、参数类型、参数个
数、参数顺序以及返回值的类型不能完全相同。
r
(
3
)<
/p>
inline
函数表示编译器一定会将函数体直接插入到调用此函
数的地方,这样可以
加快程序的运行速度。
w
(4
)
将类
A
所有构造函数的可访问性都限制为私有的,
那么在
main
函数中不可能得到
< br>类
A
的实例对象。
r
(
p>
5
)
名字空间是可以多层嵌套的;
对于类
A
中的函数成员和数据成员,
它们都属于类
名
A
代表的
一层名字空间。
r
(
6
)若在类
Base
p>
和派生类
Derived
中,分别声明一个
同名的整型成员变量
int x; ,
那么通过
Derived
类的实例对象,不可能输出基类
Bas
e
中的变量
x
的值。
< br>
W
(
7
)若类
A
是类
B
的友员类,且类
B
是类
C
的友员类,那么类
A
也是类
C
的友员类。
w
(
8
)
虽然抽象类的析构函数可以
是纯虚函数,
但要实例化其派生类对象,
仍必须提供
抽象基类中析构函数的函数体。
w
(
p>
9
)构造函数的初始化列表中的内容,不会影响构造对象中成员数据
的初始化顺序。
r
(
10
)
c++
可以任意使用
c
中的函数
w
五、简答题
(
每个
3
分,共
15
分
)
1
.
“
p>
引用
”
与多态的关系?
引用是除指针外另一个可以产生多态效果的手段。
这意味
着,
一个基类的引用可以指向它的派生
类实例。
2.
函数模板与类模板有什么区别?
答:
函数模板的实例化是由编译程序在处理函数调用时自动完成
的,
而类模板的实例化必须由程
序员在程序中显式地指定。
p>
3.
请讲一讲析构函数和虚函数的用法和作用?
< br>答
:
析构函数也是特殊的类成员函数,它没有返回类型,
没有参数,不能随意调用,也没有重载。
只是在类对象生命期结束的时候,
由系统自动调用释放在构造函数中分配的资源。
系统会默认生
成一个析构函数
.
另:
析构函数一般在对象撤消前做收尾工作,比如回收内存等工作,
虚函数一般用于多态
,
那么什么是多态
?
就是在运行时,能依据其类型确认调用那个函数,也称滞
p>
后联编。
如果是纯虚函数,则纯粹是为了
在统一调用。含有纯虚函数的类称为抽象类
,
不能实例化对象<
/p>
,
主
要用作接口类
如果将析构函数设为虚析构
,
则在
多态时
,
可以触发子类的析构函数
.
注意
:
子类重新定义父类的虚函数的做
法叫覆盖
,override,
而不是
overload(
重载
).