1、国家二级( C+)机试模拟试卷 115及答案与解析 一、选择题 1 有如下类定义: class B public: void fun1() private: void fun2() protected: void fun3() ; class D: public B protected: void fun4() ; 若 obj是类 D的对象,则下列语句中不违反访问控制权限的是 ( )。 ( A) obj.fun1(); ( B) obj.fun2(); ( C) obj.fun3(); ( D) obj.fun4(); 2 支持子程序调用的数据结构是 ( )。 ( A)栈 ( B)树 ( C)
2、队列 ( D)二叉树 3 下列关于运算符重载的叙述中,错误的是 ( )。 ( A)有的运算符可以作为非成员函数重载 ( B)所有的运算符都可以通过重载而被赋予新的含义 ( C)不得为重载的运算符函数的参数设置默认值 ( D)有的运算符只能作为成员函数重载 4 有如下类定义: class MyClass int value; public: MyClass(int n): value (n) int getValue()const return value; ; 则类 MyClass的构造函数的个数是 ( )。 ( A) 1个 ( B) 2个 ( C) 3个 ( D) 4个 5 在下列模式中,能
3、够给出数据库物理存储结构与物理存取方法的是 ( )。 ( A)外模式 ( B)内模式 ( C)概念模式 ( D)逻辑模式 6 在函数中,定义一个变量时,默认的存储类型是 ( A) extern ( B) auto ( C) register ( D) static 7 有如下程序: #include #include using namespace std; class TV public: TV(int s=41):size(s) cout using namespace std; void _ int z=x; x=y; y=z; int main() int x=0,y=1; f(x,y
4、); cout #include using namespace std; class Father public: Father(string s):name(s) cout using namespace std; class Base int m; public: Base() cout using namespace std; class Base public: void fun() coutfun(); ( D) fun(); 21 对于循环队列,下列叙述中正确的是 ( )。 ( A)队头指针是固定不变的 ( B)队头指针一定大于队尾指针 ( C)队头指针一定小于队尾指针 ( D)
5、队头指针可以大于队尾指针,也可以小于队尾指针 22 已知函数 f的原型是 void f(int *a, long ,变量 v1、 v2的定义是: int v1; long v2; 下列调用语句中正确的是 ( )。 ( A) f(v1, ( B) f(v1,v2); ( C) f( ( D) f( 23 下列关于模板的叙述中,错误的是 ( A)调用模板函数时,在一定条件下可以省略模板实参 ( B)可以用 int、 double这样的类型修饰符来声明模板参数 ( C)模板声明中的关键字 class都可以用关键字 typename替代 ( D)模板的形参表中可以有多个参数 24 有如下程序段: in
6、t i=1; while(1) i+; if(i = 30) break; if(i%3 = 0) cout using namespace std; void _ int z=x; x=y; y=z; int main() int x=0,y=1; f(x,y); cout #include using namespace std; class Animal public: virtual string GetType() const return “Animal“; virtual string GetVoice() const return “Voice“; ; class Dog:pu
7、blic Animal public: string GetType() const return “Dog“; string GetVoice() const return “Woof“; ; class Cat:public Animal public: string GetType() const return “Cat“; string GetVoice() const return “Miaow“; ; void Type(Animal a) coutTfun(Tx)returnx*x; ( B) templateTfun(Tx,intn)returnx+n; ( C) templa
8、teTfun(T*p)return*p; ( D) templateTfun()returnT; 31 某个工厂有若干个仓库,每个仓库存放有不同的零件,相同零件可能放在不同的仓库中。则实体仓库和零件间的联系是 ( A)多对多 ( B)一对多 ( C)多对一 ( D)一对一 32 派生类的成员函数不能访问的基类成员是 ( A)公有成员和保护成员 ( B)私有成员 ( C)保护成员 ( D)公有成员 33 下列叙述中正确的是 ( )。 ( A)循环队列有队头和队尾两个指针,因此,循环队列是非线性结构 ( B)在循环队列中,只需要队头指针就能反映队列中元素的动态变化情况 ( C)在循环队列中,只需要
9、队尾指针就能反映队列中元素的动态变化情况 ( D)循环队列中元素的个数是由队头指针和队尾指针共同决定 34 下列运算符中,不能被重载的是 ( )。 ( A) ; class Circle:public Point public: Circle(int r):radius(r) private: int radius; ; 派生类 Circle中数据成员的个数为 ( A) 1 ( B) 2 ( C) 3 ( D) 5 38 若 x和 y是程序中的两个整型变量,则下列 if语句中正确的是 ( A) if(x!=0)y=1;elsey=2; ( B) if(x!=0)y=1elsey=2; ( C)
10、 if(x!=0)theny=1elsey=2; ( D) ifx!=0y=1;elsey=2; 39 有如下程序: #include #include using namespace std; class Wheel public: Wheel(string s=“W“):name(s) cout usingnamespaeestd; clasSDate public: Date(inty=2006, intm=1, intd=1) ERROR“ *found* : year=y, month=m, day=d ERROR*found* Date(constDated) this-year=
11、d year; this-month=d month; this-day=d day; voidprint()const cout classvehicle private: intMaxSpeed; intWeight; public: vehicle(): MaxSpeed(0), Weight(0) vehicle(intmax_speed, intweight) : MaxSpeed(max_speed), Weight (weight) *found* _Run() coutRun(); ptr=来调用基类的成员函数 fun。 21 【正确答案】 D 【试题解析】 循环队列的队头指针
12、与队尾指针都不是固定的,随着入队与出队操作要进行变化。因为是循环利用的队列结构所以对头指针有时可能大于队尾指针有时也可能小于队尾指针。 22 【正确答案】 D 【试题解析】 函数参数的 3种传递方式: 将变量名作为形参和实参,即传值方式; 传递变量指针; 引用形参。本题中函数 f 的第一个形参为指针 ,那么调用f 函数时,第一个参数必须是地址,所以必须是 Type(d)时,执行基类的 Type函数,输出 Animal,然后输出 speak,然后执行派生类的 Speak 函数输出Woof,最后输出 -,同理 cat输出类似,所以结果为 D选项正确。 29 【正确答案】 B 【试题解析】 字符型常
13、量是用单引号括起来的一个字符。 B 选项中 “n“是字符串常量,答案为 B。 30 【正确答案】 D 【试题解析】 模板形参表中, class关键字修饰的是类型形参,代表在函数中使用的数据类型,而 return语句返回的应该是整型值,选项 D错误, 答案为 D。 31 【正确答案】 A 【试题解析】 一般来说,实体集之间必须通过联系来建立联接关系,分为三类:一对一联系( 1:1)、一对多联系( 1:m)、多对多联系( m:n)。每个仓库存放有不同的零件,相同零件可能放在不同的仓库中,故实体仓库和零件间的联系是多对多, A选项正确。 32 【正确答案】 B 【试题解析】 基类中的 private
14、成员,只有基类和基类的友元可以访问,派生类的成员函数不能直接访问,所以派生类若要访问基类的 private成员,必须使用基类的接口,答案为 B。 33 【 正确答案】 D 【试题解析】 循环队列有队头和队尾两个指针,但是循环队列仍是线性结构的,所以 A)错误;在循环队列中只需要队头指针与队尾两个指针来共同反映队列中元素的动态变化情况,所以 B)与 C)错误。 34 【正确答案】 C 【试题解析】 C+不能重载的运算符只有 5个,即 “.“、 “.*“、 “:“、 “?:“、“sizeof“,故本题答案为 C。 35 【正确答案】 D 【试题解析】 本题考查类模板的概念和定义,模板参数可以作为成
15、员函数的局部变量的类型。 36 【正确答案】 D 【试题解析】 本题考查函数参数的相关知识,函数原型中必须声明形参类型,所以 A选项错误,调用一个函数时如果修改了形参值,那么实参可能改变也可能不改变,所以 B 选项错误,函数形参的生存期一般在函数执行整个函数中存在,除了静态变量。 37 【正确答案】 C 【试题解析】 本题考查如何定义派生类以及派生类对基类成员的访问,声明派生类的一般形式为: class派生类名: 继承方式 基类名题目中公用继承,所以也继承基类的数据成员,所以总共有 3个数据成员,所以 C选项正确。 38 【正确答案】 A 【试 题解析】 本题考查 if语句, if语句一种形式为: if(表达式 1)语句 1