二级C++选择题专项强化真题试卷5
选择题
1.有如下类模板定义:
template<typename T>
class BigNumber{
long n;
public:
BigNumber(T i):n(i){}
BigNumber operator+(BigNumber B) {
return BigNumber(n+b.n);
}
}
已知b1、b2是BigNumber的两个对象,则下列表达式中错误的是( )。
A) b1+b2
B) b1+3
C) 3+b1
D) 3+3(C)
A.
B.
C.
D.
解析:
2.分布式数据库系统不具有的特点是(D)
A. 数据分布性和逻辑整体性
B. 位置透明性和复制透明性
C. 分布性
D. 数据冗余
解析:分布式数据库系统具有数据分布性、逻辑整体性、位置透明性和复制透明性的特点,其数据也是分布的;但分布式数据库系统中数据经常重复存储,数据也并非必须重复存储,主要视数据的分配模式而定。若分配模式是一对多,即一个片段分配到多个场地存放,则是冗余的数据库,否则是非冗余的数据库。
3.下列关于基类和派生类关系的叙述中,正确的是(D)
A. 每个类最多只能有一个直接基类
B. 派生类中的成员可以访问基类中的任何成员
C. 基类的构造函数必须在派生类的构造函数体中调用
D. 派生类除了继承基类的成员,还可以定义新的成员
解析:派生类可以只有一个直接基类,也可以同时有多个直接基类,A错。基类中的私有成员在派生类中是隐藏的,只能在基类内部访问,派生类中的成员不能访问基类中的私有成员,B错。基类的构造函数在派生类构造函数的成员初始化列表中调用,C错。D项正确。
4.下列关于赋值运算符“=”重载的叙述中,正确的是(A)
A. 赋值运算符只能作为类的成员函数重载
B. 默认的赋值运算符实现了“深层复制”功能
C. 重载的赋值运算符函数有两个本类对象作为形参
D. 如果已经定义了复制(拷贝)构造函数,就不能重载赋值运算符
解析:=、[]、()、->以及所有的类型;转换运算符只能作为成员函数重载,A项正确。默认的赋值运算符只实现了浅层复制,B项错误。赋值运算符只能作为成员函数重载,形参表中只有一个参数,对应于第二操作数,C项错误。一个类中如果需要重载运算符 “=\\
5.下列关于模板的叙述中,正确的是(C)
A. 如果一个类中存在纯虚函数,这个类就是类模板
B. 函数模板不能有形式参数表
C. 类模板是一种参数化类型的类,是类的生成器
D. 类模板中不能包含构造函数
解析:
6.有类定义如下:
class Type{
public:
Type(int i=0);
Type operator-(int);
friend Type operator+(Type,Type);
private:
int val;
};
若有对象定义Type c1;则下列语句序列中,错误的是(C)
A. Type(3)+c1;
B. c1+Type(3);
C. 3-c1;
D. c1-3;
解析:
7.执行语句序列 intn: cin>>n: switch(n) { casel: case2:cout<<’1’: case 3: case4:cout<<’2’: break: delhult:cout<<’3’: } 时,若键盘输入1,则屏幕显示(D)
A. 1
B. 2
C. 3
D. 12
解析:本题考核C++语句中的switch语句。switch语句也称为开关语句,用于有多重选择的场合,测试某一个变量具有多个值时所执行的动作。switch语句中每个case语句只是一个入口标号,并不能确定执行的终点,因此,每个case分支的最后应该加break语句,用来结束这个switch结构,否则,会从入口点开始,一直执行到switch结构的结束点。若键盘输入1,n的值被赋为1,进入第一个分支,没有break跳出,然后进入第二个分支,执行“cout<<’1’”输出1,然后进入第3、4个分支,执行“cout<<’2’;”,然后执行break,跳出switch语句。所以最后输出为12。
8.在C++中用来实现运行时多态性的是(D)
A. 重载函数
B. 析构函数
C. 构造函数
D. 虚函数
解析:本题考核虚函数。在C++语言中,多态性可分为两类:编译时的多态性和运行时的多态性。编译时的多态性是通过函数重载和模板体现。其实现机制称为静态联编(也译为静态绑定),即在编译阶段决定执行哪个同名的被调用函数:运行时的多态性是通过体现的,其实现机制称为动态联编(也译为动态绑定),即在编译阶段不能决定执行哪个同名的被调用函数,只在执行阶段才能依据要处理的对象类型来决定执行哪个类的成员函数。用来实现运行时多态性的是虚函数。
9.下列关于运算符重载的描述中,正确的是(D)
A. 运算符重载可以改变操作数的个数
B. 运算符重载可以改变运算符的优先级
C. 运算符重载可以改变运算符的结合性
D. 运算符重载可以使运算符实现特殊功能
解析:
10.在重载一个运算符为成员函数时,其参数表中没有任何参数,这说明该运算符是(B)
A. 后缀一元运算符
B. 前缀一元运算符
C. 无操作数的运算符
D. 二元运算符
解析:
11.有如下类声明: class Foo{ int bar; }; 则Foo类的成员bar是(C)
A. 公有数据成员
B. 公有成员函数
C. 私有数据成员
D. 私有成员函数
解析:默认属性为private。
12.有如下程序: #include<iostream> using namespace std; int main() { cout.fill(’*’) cout.width(6); cout.fill(’#’) cout<<123<<endl; return 0; } 执行后的输出结果是(A)
A. ###123
B. 123###
C. ***123
D. 123***
解析:cout函数的fill()方法用来填充不足宽度:width()用来指定输出宽度。
13.在表达式x+y*z中,+是作为成员函数重载的运算符,*是作为非成员的函数重载的运算符。下列叙述中正确的是(C)
A. operator+有两个参数,operator*有两个参数
B. operator+有两个参数,operator*有一个参数
C. operator+有一个
本文档预览:3600字符,共7732字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载