2015年计算机二级考试《C++》突破试卷
参考解析:在E—R图中实体集用矩形.属性用椭圆,联系用菱形。
2有如下程序:
#jnClude
using namespaCe std; Class Part{
publiC:
Part(int x=0):val(X){Cout<
private:
int val; t };
Class Whole{ publiC:
Whole(int x,int Y,int z=0):p2(x),pl(y),val(z){Cout<
private:
Part pl,p2; int val;
};
int main() {
Whole obj(1,2,3); return 0;
}
执行这个程序的输出结果是( )。
A.123321B.213312C.213D.123123
参考答案:B
参考解析:本题考查带参数的构造函数。本题中定义了一个对象obj,那么执行其构造函数,初始化p1,p2的顺序是由声明这两个成员的顺序决定的,而不是由参数化列表顺序决定,所以本题中,会先执行p1,输出2,然后执行p2输出1,然后输出3,最后一次输出312。所以本题答案为8。
3没有定义int x;float Y;,则10+x+y值的数据类型是( )。
A.intB.doubleC.floatD.不确定
参考解析:由算术运算符组成的表达式中,若含有不同类型的操作数,则系统隐含地将低类型转化为高类型,由低至高的顺序为int→float→double。
4有如下类定义:
class Point{
private:
static int how_many;
};
___________how_many=0;
要初始化Point类的静态成员how_many,下画线处应填入的内容是( )。
A.intB.static intC.int Point::D.static int Point::
参考解析:本题考查静态数据成员,静态数据成员可以初始化,但只能在类体外进行初始化,其一般形式为:数据类型类名::静态数据成员名=初值。所以本题答案为C。
5有如下类定义:
class Test
{
public:
Test(){a=0;c=0;}//①
int f(im A.const{this->a=a;}//②
static int g(){return a;f//③
void h(int B.{Test:.b=b;};//④
private:
int a;
static int b;
const int C;
};
int Test::b=0:
在标注号码的行中,能被正确编译的是( )。
A.①B.②C.③D.④
参考答案:D
参考解析:只能通过构造函数的参数初始化列表对常数据成员进行初始化,本题中常数据成员为C。①通过默认构造函数初始化c,所以不正确。常成员函数只能引用本类中数据成员,而不能修改它,所以②不正确。静态成员函数由于没有this指针,所以不能访问本类中的非静态成员,所以
③错误。
6某系统总体结构图如下图所示:
该系统总体结构图的深度是( )。
A.7B.6C.3D.2
参考解析:根据总体结构图可以看出陔树的深度为3,比如:XY系统——功能2——功能2.1,就是最深的度数的一个表现。
7有如下类定义:
Class AA{ int a; publiC: AA(int n=0):a(n){}
};
Class BB:publiC AA{ publiC:
BB(int n)—— };
其中横线处缺失的部分是( )。
A.:a(n){}B.:AA(n)|}C.{a(n);}D.{a=n;}
参考答案:B
参考解析:本题考查公用继承对基类成员访问属性。公用继承中,基类的公用成员和保护成员在派生类中保持原有访问属性,其私有成员仍为基类私有,本题中若要给派生类继承下来基类的私有成员赋值,那么只能调用基类的成员函数来对它赋值,所以本题答案为B。
8有如下类定义:
class MyClass{
int value;
public:
MyClass(int n):value(n){}
int getValue()const{retum value;}
};
则类MyClass的构造函数的个数是( )。
A.1个B.2个C.3个D.4个
参考答案:B
参考解析:本题考查类的默认构造函数和自定义的构造函数、本题中MyClass(int n):value(n){}为自定义的构造函数,加上默认构造函数,一共有2个构造函数。
9下列关于派生类构造函数和析构函数的说法中,错误的是( )。
A.派生类的构造函数会隐含调用基类的构造函数
B.如果基类中没有缺省构造函数,那么派生类必须定义构造函数
C.在建立派生类对象时,先调用基类的构造函数,再调用派生类的构造函数
D.在销毁派生类对象时,先调用基类的析构函数,再调用派生类的析构函数
参考答案:D
参考解析:在销毁派生类对象时,先调用派生类的析构函数,再调用基类的析构函数。
10下列叙述中正确的是( )。
A.栈是一种先进先出的线性表
B.队列是一种后进先出的线性表
C.栈与队列都是非线性结构
D.以上三种说法都不对
参考答案:D
参考解析:栈是一种先进后出的线性表,队列是一种先进先出的线性表,栈与队列都是线性结构。
11关于关键字class和typename,下列表述中正确的是( )。
A. 程序中的typename都可以替换为class
B.程序中的class都可以替换为typename
C.在模板形参表中只能用{ypename来声明参数的类型
D.在模板形参表中只能用class或typenanle来声明参数的类型
参考答案:A
参考解析:程序中的typename都可以替换为class,但程序中的class不可以全部替换为typename。在模板类型形参中除了 typename和class以外,也可以用常规类型来声明参数的类型,所以C、D选项错误。
12数据库管理系统是( )。
A.操作系统的一部分
B.在操作系统支持下的系统软件
C.一种编译系统
D.一种操作系统
参考答案:B
参考解析:数据库管理系统是数据库的机构,它是一种系统软件,负责数据库中数据组织、数据操纵、数据维护、控制及保护和数据服务等。是一种在操作系统之上的系统软件。
13软件生命周期是指( )。
A.软件产品从提出、实现、使用维护到停止使用退役的过程
B.软件从需求分析、设计、实现到测试完成的过程
C.软件的开发过程
D.软件的运行维护过程
参考答案:A
参考解析:通常,将软件产品从提出、实现、使用维护到停止使用退役的过程称为软件生命周期。也就是说,软件产品从考虑其概念开始,到该软件产品不能使用为止的整个时期都属于软件生命周期。
14下列符号中不属于C++关键字的是( )。
A.friendB.namespaeeC.ContinueD.byte
参考答案:D
参考解析:本题考查C++关键字,属于基本常识,显然D选项不正确。
15下面关于数组的初始化正确的是( )。
A.char str[]={’a’,’b’,’C’}
B.char str[2]={’a’,’b’,’c’}
C.char str[2][3]={{’a’,’b’},{’C’,’d’},{’e’,’f’}}
D.char str()={~a,~b,~C}
参考答案:A
参考解析:本题考查的是字符数组的初始化。选项B中用3个庀素初始化大小为2的数组,越界了;选项c中应该是2行3列的数组,题中使用3行2列初始化;选项D中数组合后应用方括号。
16下列叙述中正确的是( )。
A.顺序存储结构的存储一定是连续的,链式存储结构的存储空间不一定是连续的
B.顺序存储结构只针对线性结构,链式存储结构只针对非线性结构
C.顺序存储结构能存储有序表,链式存储结构不能存储有序表
D.链式存储结构比顺序存储结构节省存储空间
参考答案:A
参考解析:链式存储结构既可以针对线性结构也可以针对非线性结构,所以B与C错误。链式存储结构中每个结点都由数据域与指针域两部分组成,增加了存储空间,所以D错误。
17下列各组类型声明符中,含义相同的一组是( )。
A.unsigned long int和long
B.signed short int和short
C.unsigned short和short
D.short int和int
参考答案:B
参考解析:本题考查整型变量的类型,A、c选项中前者为无符号的,后者为有符号的,D选项中short int为2个字节,int为4个字节。
18下面程序的运行结果是( )。
#include class base{
protected: int a; public:
base(){cout<<”0”;}
}; class basel:virtual base{
public:
basel(){cout<<”1”;}
};
class base2:virtual base i public: base2(){cout<<”2”;}
};
class derived:public basel,public base2{ public:
derived(){cout<<”3”;}
};
void main()
derived obj;
cout<
A.0123B.3120C.0312D.3012
参考答案:A
参考解析:本题考查的是含有虚基类的继承中构造函数的调用顺序,应该先调用基类的构造函数,接着是按照派生类继承列表的顺序依次调用虚基类的构造函数,最后调用派生类自己的构造函数。
19下列描述正确的是( )。
A.表示m>n为true或mn&&m
参考答案:D
参考解析:本题主要考查c++语言的基本语法,选项A中应该为m>n|j m
20下列运算符函数中肯定不属于类FunNumber的成员函数的是( )。
A.int operator一(FunNumber);
B.FunNumber operator一();
C.FunNumber operator一(int);
D.int operator一(FunNumber,FunNumber);
参考答案:D
参考解析:本题考查运算符重载的一些规则:①一般情况下,单目运算符最好重载为类的成员函数,双目运算符则最好重载为类的友元函数;②双目运算符=、()、[]、->不能重载为类的友元函数;③类型转换函数只能定义为一个类的成员函数,而不能定义为类的友元函数;④若一个运算符的操作需要修改对象的状态,选择重载为成员函数较好;⑤若运算符所需的操作数(尤其是第一个操作数)希望有隐式类型转换,则只能选用友元函数;⑥当运算符函数是一个成员函数时,最左边的操作数(或者只有最左边的操作数)必须是运算符类的一个类对象(或者是对该类对象的引用);如果左边的操作数必须是一个不同类的对象,或者是一个内部类型的对象,该运算符函数必须作为一个友元函数来实现。所以答案为D。
21下列程序的运行结果是( )。
#include
class A
{
int a;
public:
A(){a=0;}
A(int aA.
{
a=aa;
cout<
}
};
void main()
{
A X,Y(2),z(3);
cout<
}
A.00B.23C.34D.25
参考答案:B
参考解析:本题考查的是对构造函数的掌握,另外“++”运算符是右结合的,所以在进行输出的时候都是先把原来的输出后再自加l。
22关于函数重载,下列叙述中错误的是( )。
A.重载函数的函数名必须相同
B.重载函数必须在参数个数或类型上有所不同
C.重载函数的返回值类型必须相同
D.重载函数的函数体可以有所不同
参考解析:所谓函数重载是指同一个函数名可以对应多个函数的实现。每种实现对应…个函数体,这些函数的名字相同,其参数类型或个数不同,但不能出现函数返回值类型不同而参数类型和个数完全相同的重载。所以本题答案为c。