1、二级 C+笔试-377 及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:35,分数:70.00)1.下面是关于派生类声明的开始部分,其中正确的是( )。(分数:2.00)A.class virtual B:public AB.virtual class B:public AC.class B:public A virtualD.class B:virtual public A2.下列叙述中正确的是( )。(分数:2.00)A.一个逻辑数据结构只能有一种存储结构B.逻辑结构属于线性结构,存储结构属于非线性结构C.一个逻辑数据结构可以有多种存储结构,且各种存储结构不影响数
2、据处理的效率D.一个逻辑数据结构可以有多种存储结构,且各种存储结构影响数据处理的效率3.在软件开发中,需求分析阶段产生的主要文档是( )。(分数:2.00)A.可行性分析报告B.集成测试计划C.概要设计说明书D.软件需求规格说明书4.有如下程序:#includeiostreamusing namespace std;class Apublic:A()cout“A“;A()cout“A“;class B:public AA*p;public:B()cout“B“;p=new A;B()cout“B“;delete p;int main()B obj;return 0;执行这个程序的输出结果是(
3、)。(分数:2.00)A.BAAABAB.ABABAAC.BAABAAD.ABAABA5.若要把函数 void fun()定义为 TestClass 的友元函数,则应该在类 TestClass 的定义中加入的语句是( )。(分数:2.00)A.void friend fun()B.friend fun()C.friend void fun()D.TestClass void fun()6.如果一个关系中,存在多个属性(或属性组)都能用来唯一标识该关系的元组,且其任何一个子集都不具有这一特性。这些属性(或属性组)都被称为关系的( )。(分数:2.00)A.连接码B.主码C.外码D.候选码7.已知
4、一个有序线性表为(13,18,24,35,47,50,62,83,90,115,134),当用二分法查找值为 90的元素时,查找成功的比较次数为( )。(分数:2.00)A.1B.2C.3D.98.在函数中,可以用 auto、extern、register 和 static 这四个关键字中的一个来说明变量的存储类型,如果不说明存储类型,则默认的存储类型是( )。(分数:2.00)A.autoB.externC.registerD.static9.类 MyClass 的定义如下,若要对 value 赋值,则下面语句正确的是( )。class MyClasspublic:MyClass()MyCl
5、ass(int i)value=new int(i);int*value;(分数:2.00)A.MyClass my;my.value=10;B.MyClass my;*my.value=10;C.MyClass my;my.*value=10;D.MyClass my(10);10.字面常量 42、4.2、42L 的数据类型分别是( )。(分数:2.00)A.long,double,intB.long,float,intC.int,double,longD.int,float,long11.已知递归函数 fun 的定义如下:int fun(int n)if(n=1)return1;/递归结束
6、情况else return n*fun(n-2);/递归则函数调用语句 fun(5)的返回值是( )。(分数:2.00)A.5B.12C.15D.3012.有下列二叉树,对此二叉树中序遍历的结果为( )。(分数:2.00)A.BDYEACFXZB.DYBEAFCZXC.ABCDEFXYZD.ABDYECFXZ13.关于结构化程序设计原则和方法的描述错误的是( )。(分数:2.00)A.选用的结构只准许有一个入口和一个出口B.复杂结构应该用嵌套的基本控制结构进行组合嵌套来实现C.不允许使用 GOTO 语句D.语言中所没有的控制结构,应该采用前后一致的方法来模拟14.在数据库设计中,将 E-R 图
7、转换为关系模式的过程属于( )。(分数:2.00)A.需求分析阶段B.逻辑设计阶段C.概念设计阶段D.物理设计阶段15.有如下程序:#includeiostreamusing namespace std;class sampleprivate:int x,y;public:sample(int i,int j)x=i;y=j;void disp()cout“disp1“endl;void disp()constcout“disp2“endl;int main()const sample a(1,2);a.disp();return 0;该程序运行后的输出结果是( )。(分数:2.00)A.di
8、sp1B.disp2C.disp1 disp2D.程序编译时出错16.设 R 是一个 2 元关系,有 3 个元组,S 是一个 3 元关系,有 4 个元组。如 T=RS,则 T 的元组为( )个。(分数:2.00)A.6B.8C.12D.1617.有如下程序:#includeiost earnusing namespace std;class TestClassprotected:TestClass()coutx;TestClass(char C) coutc;class TestClass1:public TestClasspublic:TestClass1(char C) Coutc;);i
9、nt main()TestClass1 d1(y);return 0;执行这个程序,屏幕上将显示输出( )。(分数:2.00)A.yB.yxC.xyD.yy18.若有以下程序:#includeiostreamusing namespace std;class TestClasspublic:void who()cout“TestClass“endl;class TestClass1:public TestClasspublic:void who()cout“TestClass1“endl;int main()TestClass *p;TestClass1 obj1;P=P-who();retu
10、rn 0;则该程序运行后的输出结果是( )。(分数:2.00)A.TestClass1B.TestClassC.0D.无输出19.有如下程序:#includeiostreamusing namespace std;class Testpublic:Test() n+=2;Test() n-=3;static int getNum()return n;private:static int n;int Test:n=1;int main()Test*p=new Test;delete p;cout“n=“Test:getNum()endl;return 0;执行后的输出结果是( )。(分数:2.0
11、0)A.n=0B.n=1C.n=2D.n=320.若有以下程序:#includeiostreamusing namespace std;class Apublic:A(int i,int j)a=i;b=j;void move(int x,int y)a+=x;b+=y;void show()couta“,“bendl;private:int a,b;class B:private Apublic:B(int i,int j):A(i,j)void fun()move(3,5);void fl()A:show();int main()B d(3,4);d.fun();d.fl();return
12、 0;程序执行后的输出结果是( )。(分数:2.00)A.3,4B.6,8C.6,9D.4,321.下列有关拷贝构造函数的描述中错误的是( )。(分数:2.00)A.拷贝构造函数是一种构造函数B.拷贝构造函数与一般的构造函数一样,可以设置多个形参C.每一个类中都必须有一个拷贝构造函数D.拷贝构造函数的功能是用一个已知对象去初始化一个正在创建的对象22.有如下类的定义,横线处的语句是( )。class TestClass_ int x,y;public:TestClass(int a=0,int b=0)X=a:y=b;static void change()y-=10;y-=10;(分数:2.
13、00)A.publicB.privateC.staticD.protected23.下面叙述错误的是( )。(分数:2.00)A.派生类可以使用 private 派生B.对基类成员的访问必须是无二义性的C.基类成员的访问能力在派生类中维持不变D.赋值兼容规则也适用于多继承的组合24.下面的描述中,正确的是( )。(分数:2.00)A.virtual 可以用来声明虚函数B.含有纯虚函数的类是不可以用来创建对象的,因为它是虚基类C.即使基类的构造函数没有参数,派生类也必须建立构造函数D.静态数据成员可以通过成员初始化列表来初始化25.假定 MyClass 为一个类,那么下列的函数说明中,( )为该
14、类的析构函数。(分数:2.00)A.voidMyClass();B.MyClass(int n);C.MyClass();D.MyClass();26.若有如下程序:#includeiostreamusing namespace std;int s=0;class samplestatic int n;public:sample(int i)n=i;static void add()S+=n;int sample:n=0;int main()sample a(2),b(5);sample:add();coutsendl;return 0;程序运行后的输出结果是( )。(分数:2.00)A.2B
15、.5C.7D.327.下列重载函数中,正确的是( )。(分数:2.00)A.void fun(int a,floatb);void fun(int C,floatd)B.void fun(int a,floatb);void fun(float a,intb)C.float fun(int a,floatb);int fun(int b,floata)D.int fun(int a,intb);float fun(int a,int28.要使程序执行后的输出结果为 ABCD,应在横线处添加语句( )。#includeiostreamusing namespace std;public:A()c
16、outA;class B=_public:B()coutB;class C:virtual public Apublic:C()coutC;class D:public B,public Cpublic:D()coutD;void main()D obj;(分数:2.00)A.public AB.private AC.protected AD.virtual public A29.下列有关继承和派生的叙述中,正确的是( )。(分数:2.00)A.如果一个派生类私有继承其基类,则该派生类对象不能访问基类的保护成员B.派生类的成员函数可以访问基类的所有成员C.基类对象可以赋值给派生类对象D.如果派
17、生类没有实现基类的一个纯虚函数,则该派生类是一个抽象类30.下列程序的输出结果为 2,横线处应添加语句( )。#includeiostreamusing namespace std;public:_void fun()cout1;class TestClass2:public TestClass1public:void fun()cout2;);int main()TestClass1 *p=new TestClass2;p-fun();delete p;Teturn 0;(分数:2.00)A.publicB.privateC.virtualD.protected31.下列关于类、对象、属性和
18、方法的叙述中,错误的是( )。(分数:2.00)A.类是对一类相似对象的描述,这些对象具有相同的属性和方法B.属性用于描述对象的状态,方法用于表示对象的行为C.基于同一个类产生的两个对象可以分别设置自己的属性值D.通过执行不同对象的同名方法,其结果必然是相同的32.下列情况中,不会调用拷贝构造函数的是( )。(分数:2.00)A.用一个对象去初始化同一类的另一个新对象时B.将类的一个对象赋值给该类的另一个对象时C.函数的形参是类的对象,调用函数进行形参和实参结合时D.函数的返回值是类的对象,函数执行返回调用时33.下列运算符中不能在 C+中重载的是( )。(分数:2.00)A.?:B.+C.-
19、D.=34.下列有关内联函数的叙述中,正确的是( )。(分数:2.00)A.内联函数在调用时发生控制转移B.内联函数必须通过关键字 inline 来定义C.内联函数是通过编译器来实现的D.内联函数函数体的最后一条语句必须是 return 语句35.算法的空间复杂度是指( )。(分数:2.00)A.算法程序的长度B.算法程序中的指令条数C.算法程序所占的存储空间D.算法执行过程中所需要的存储空间二、填空题(总题数:15,分数:30.00)36.按照逻辑结构分类,结构可以分为线性结构和非线性结构,栈属于 1。(分数:2.00)填空项 1:_37.若 D1=a1,a2,a3,D2=b1,b2,b3,
20、则 D1D2 集合中共有 1 个元组。(分数:2.00)填空项 1:_38.树中度为零的结点称为 1。(分数:2.00)填空项 1:_39.测试用例包括输入值集和 1 值集。(分数:2.00)填空项 1:_40.软件生命周期分为软件定义期、软件开发期和软件维护期,详细设计属于 1 中的一个阶段。(分数:2.00)填空项 1:_41.有如下程序:#includeiostreamusing namespace std;class Conchar ID;public:Con():ID(A)cout1;Con(char ID) :ID(ID) cout2;Con(Conchar getID()cons
21、treturn ID;void show(Con C) coutc.getID();int main()Con c1;show(c1);Con c2(B);show(c2);return 0;执行上面程序,输出是_。(分数:2.00)填空项 1:_42.如果表达式 x=y*z 中的*是作为成员函数重载的运算符,采用运算符函数调用格式,该表达式还可以表示为 1。(分数:2.00)填空项 1:_43.C+中只有两个逻辑常量:true 和 1。(分数:2.00)填空项 1:_44.对基类数据成员的初始化必须在派生类的构造函数中的 1 处执行。(分数:2.00)填空项 1:_45.有如下类声明:cla
22、ss TestClassint i;private:int j;protected:int k;public:int m,n;其中,私有成员的数量为_。(分数:2.00)填空项 1:_46. 1 是一种特殊的成员函数,它主要用来为对象分配内存空间,对类的数据成员进行初始化并执行对象的其他内部管理操作。(分数:2.00)填空项 1:_47.执行以下程序后,输出结果第二行的内容是_。#includeiostreamusing namespace std;class TestClasspublic:virtual void who()cout“Base Class“endl;class TestCl
23、ass1:public TestClasspublic:virtual void who()cout“TestClass1 Class“endl;class TestClass2:public TestClasspublic:virtual void who()cout“TestClass2 Class“endl;int main(int argc,char*argv)TestClass obj1,*p;TestClass1 obj2;TestClass2 obj3;P=p-who();p=p-who();p=p-who();return 0:(分数:2.00)填空项 1:_48.有一种只在循
24、环语句或 switch 语句中使用的流程控制语句,表示该语句的关键字是 1。(分数:2.00)填空项 1:_49.程序中有如下语句:for(int i=0;i5;i+)cout*(p+i)“,“;能够依次输出 int 型一维数组 DATA 的前 5 个元素。由此可知,变量 p 的定义及初始化语句是_。(分数:2.00)填空项 1:_50.有如下程序:#includeiostreamusing namespace std;class Basepublic;int m,n;class Derived1:_Base;class Derived2:public Derivedlpublic:void
25、SetMN(int M,int N)m=M;n=N;int GetSumMN()return(m+n);int main()Derived2 objD;objD.SetMN(3,4);cout“M+N=“objD.m+bojD.nendl;return 0:编译时只有“cout“M+N=“objD.m+bojD.nendl;”有语法错误,程序的其他地方没有语法错误,请判断横线处使用的关键字是_。(分数:2.00)填空项 1:_二级 C+笔试-377 答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:35,分数:70.00)1.下面是关于派生类声明的开始部分,其中正确的是(
26、 )。(分数:2.00)A.class virtual B:public AB.virtual class B:public AC.class B:public A virtualD.class B:virtual public A 解析:解析 声明派生类的一般形式为:class 派生类名:继承方式基类名。其中继承方式包括:public,private,protected,而 virtual 为 C+中的关键字。虚函数的使用方法是在基类用 virtual 声明成员函数为虚函数。2.下列叙述中正确的是( )。(分数:2.00)A.一个逻辑数据结构只能有一种存储结构B.逻辑结构属于线性结构,存储结
27、构属于非线性结构C.一个逻辑数据结构可以有多种存储结构,且各种存储结构不影响数据处理的效率D.一个逻辑数据结构可以有多种存储结构,且各种存储结构影响数据处理的效率 解析:解析 数据的存储结构是指数据的逻辑结构在计算机存储空间中的存放形式,一种数据结构可以根据需要采用不同的存储结构,常用的存储结构有顺序和链式结构。采用不同的存储结构,其处理的效率是不同的。3.在软件开发中,需求分析阶段产生的主要文档是( )。(分数:2.00)A.可行性分析报告B.集成测试计划C.概要设计说明书D.软件需求规格说明书 解析:解析 软件的生命周期分为计划、开发和运行 3 个时期。其中计划期包括问题定义和可行性研究。
28、运行的任务是软件维护。开发期包括分析、设计和实施:分析即为需求分析。需求分析的最终结果是生成软件需要规格说明书,可以为用户、分析人员和设计人员之间的交流提供方便。4.有如下程序:#includeiostreamusing namespace std;class Apublic:A()cout“A“;A()cout“A“;class B:public AA*p;public:B()cout“B“;p=new A;B()cout“B“;delete p;int main()B obj;return 0;执行这个程序的输出结果是( )。(分数:2.00)A.BAAABAB.ABABAA C.BAAB
29、AAD.ABAABA解析:解析 此题考查的是类的构造函数和析构函数。派生类构造函数的执行顺序为:首先调用基类的构造函数,调用顺序按它们被继承时说明的顺序;然后调用子对象的构造函数,调用顺序按它们在类中说明的顺序;最后是派生类构造函数中的内容。因此本题中,首先调用基类构造函数输出 A,然后调用子对象的构造函数输出 B,p=new A 再调用类 A 的构造函数输出 A;析构函数的调用顺序和构造函数的调用顺序相反。5.若要把函数 void fun()定义为 TestClass 的友元函数,则应该在类 TestClass 的定义中加入的语句是( )。(分数:2.00)A.void friend fun
30、()B.friend fun()C.friend void fun() D.TestClass void fun()解析:解析 如果在类以外的其他地方定义了一个函数,在类体中用 friend 对该函数进行声明,此函数就称为本类的友元函数。因为函数为 void fun(),根据友元定义补全语句为“friend voidfun();”。6.如果一个关系中,存在多个属性(或属性组)都能用来唯一标识该关系的元组,且其任何一个子集都不具有这一特性。这些属性(或属性组)都被称为关系的( )。(分数:2.00)A.连接码B.主码C.外码D.候选码 解析:解析 在关系中凡能惟一标识元组的最小属性集称为该表的键
31、或码。二维表中可能有若干个键,它们称为该表的候选码或候选键。从二维表的所有候选键中选取一个作为用户使用的键称为主键或主码。7.已知一个有序线性表为(13,18,24,35,47,50,62,83,90,115,134),当用二分法查找值为 90的元素时,查找成功的比较次数为( )。(分数:2.00)A.1B.2 C.3D.9解析:解析 根据二分法查找法需要两次:首先将 90 与表中间的元素 50 进行比较,由于 90 大于50,所以在线性表的后半部分查找。第二次比较的元素是后半部分的中间元素,即 90,这时两者相等,即查找成功。8.在函数中,可以用 auto、extern、register 和
32、 static 这四个关键字中的一个来说明变量的存储类型,如果不说明存储类型,则默认的存储类型是( )。(分数:2.00)A.auto B.externC.registerD.static解析:解析 此题考查的是存储类型。C+语言变量的存储类型分为如下几种类型:auto函数内部的局部变量;static静态存储分配;extern全局变量;register变量存储在硬件寄存器中。9.类 MyClass 的定义如下,若要对 value 赋值,则下面语句正确的是( )。class MyClasspublic:MyClass()MyClass(int i)value=new int(i);int*val
33、ue;(分数:2.00)A.MyClass my;my.value=10;B.MyClass my;*my.value=10;C.MyClass my;my.*value=10;D.MyClass my(10); 解析:解析 因题目中定义的指针 value 是指向变量 i 的,所以直接利用语句 MyClass(int i)value=new int(i);对 value 进行赋值即可。10.字面常量 42、4.2、42L 的数据类型分别是( )。(分数:2.00)A.long,double,intB.long,float,intC.int,double,long D.int,float,lon
34、g解析:解析 此题考查的知识点是字面常量。对于整型字面常量,只要没有超过 C+中整数所能表示的范围,C+将自动按整数来存储此数,也可以通过在整型字面常量后添加 u 或 1 来指定无符号整数或长整数来存储;对于实型字面常量,C+将自动按照双精度数来存储,也可以通过在实型字面常量后添加 f 来指定按单精度数存储。11.已知递归函数 fun 的定义如下:int fun(int n)if(n=1)return1;/递归结束情况else return n*fun(n-2);/递归则函数调用语句 fun(5)的返回值是( )。(分数:2.00)A.5B.12C.15 D.30解析:解析 递归函数 fun
35、被定义为含有参数 int n,返同整型。其中 fun 函数递归调用本身,当 n=1时,fun 返回 1,如果大于 1 那么执行 n*fun(n-2)。所以,当 n 等于 5 时,执行 5*fun(3);当 3 时继续调用 fun,3*fun(1),即 fun(5)=5*(3*fun(1),答案为 15。12.有下列二叉树,对此二叉树中序遍历的结果为( )。(分数:2.00)A.BDYEACFXZB.DYBEAFCZX C.ABCDEFXYZD.ABDYECFXZ解析:解析 对二叉树的中序遍历是指:首先遍历左子树,然后访问根结点,最后遍历右子树。在遍历左、右予树时,注意依旧按照“左子树根结点右子
36、树”的顺序。本题的遍历顺序是这样的:首先访问左子树:BDEY;在左子树 BDEY 中,也按中序遍历,先访问左子树 DY;在左子树 DY 中,也按中序遍历,先访问左子树,左子树没有,则访问根结点 D,然后访问右子树 Y;接着访问根 B,再访问右子树 E;访问左子树 BDEY 后,接着访问根结点 A,接着访问右子树 CFXZ;右子树 CFXZ 的访问顺序同理可得:FCZX。13.关于结构化程序设计原则和方法的描述错误的是( )。(分数:2.00)A.选用的结构只准许有一个入口和一个出口B.复杂结构应该用嵌套的基本控制结构进行组合嵌套来实现C.不允许使用 GOTO 语句 D.语言中所没有的控制结构,
37、应该采用前后一致的方法来模拟解析:解析 限制使用 GOTO 语句是结构化程序设计的原则和方法之一,但不是绝对不允许使用 GOTO 语句。其他三项为结构化程序设计的原则。14.在数据库设计中,将 E-R 图转换为关系模式的过程属于( )。(分数:2.00)A.需求分析阶段B.逻辑设计阶段 C.概念设计阶段D.物理设计阶段解析:解析 数据库设计阶段主要包括需求分析、概念设计、逻辑设计和物理设计。其中逻辑设计的主要工作是将 E-R 图转换为关系模式。15.有如下程序:#includeiostreamusing namespace std;class sampleprivate:int x,y;pub
38、lic:sample(int i,int j)x=i;y=j;void disp()cout“disp1“endl;void disp()constcout“disp2“endl;int main()const sample a(1,2);a.disp();return 0;该程序运行后的输出结果是( )。(分数:2.00)A.disp1B.disp2 C.disp1 disp2D.程序编译时出错解析:解析 因为对象 a 被定义为常对象,所以 a.disp()语句调用的是类的常成员函数 void disp()const,输出的结果是 disp2。16.设 R 是一个 2 元关系,有 3 个元组
39、,S 是一个 3 元关系,有 4 个元组。如 T=RS,则 T 的元组为( )个。(分数:2.00)A.6B.8C.12 D.16解析:解析 R 为 n 元关系,S 为 m 元关系,分别有 p、q 两个元组。两个关系笛卡儿积后,新关系是一个 n+m 元的关系,元组个数是 qp。知识拓展 通俗而言,所谓“元”就好像表格中有多少列,“元组”就好像表格中有多少行。17.有如下程序:#includeiost earnusing namespace std;class TestClassprotected:TestClass()coutx;TestClass(char C) coutc;class Te
40、stClass1:public TestClasspublic:TestClass1(char C) Coutc;);int main()TestClass1 d1(y);return 0;执行这个程序,屏幕上将显示输出( )。(分数:2.00)A.yB.yxC.xy D.yy解析:解析 程序中的类 TestClass 为基类,TestClass1 为 TestClass 的派生类。由 main 主函数入手,定义 TestClass1 类型的对象 d1,参数值为y。TestClass1 类继承 TestClass,所以主函数中“TestClass1 d1(y);”语句首先调用调用基类中的“Te
41、stClass()coutx;)”输出 x,然后调用“TestClass1(char C) coutc;”输出 y,即答案为“xy”。18.若有以下程序:#includeiostreamusing namespace std;class TestClasspublic:void who()cout“TestClass“endl;class TestClass1:public TestClasspublic:void who()cout“TestClass1“endl;int main()TestClass *p;TestClass1 obj1;P=P-who();return 0;则该程序运行
42、后的输出结果是( )。(分数:2.00)A.TestClass1B.TestClass C.0D.无输出解析:解析 程序中的 TestClas1 为 TestClass 的派生类,主函数 main 中定义 TestClass 对象*p,TestClass1 对象 obj1,然后 p 引用 obj1,执行 p-who()则是调用基类中的 who 函数,输出TestClass。19.有如下程序:#includeiostreamusing namespace std;class Testpublic:Test() n+=2;Test() n-=3;static int getNum()return
43、n;private:static int n;int Test:n=1;int main()Test*p=new Test;delete p;cout“n=“Test:getNum()endl;return 0;执行后的输出结果是( )。(分数:2.00)A.n=0 B.n=1C.n=2D.n=3解析:解析 语句 Test*p=new Test;会调用类的构造函数 Test() n+=2;,使 n 的值由原来的 1 变为3,然后 delete p 调用类的析构函数Test() n-=3;,因为 n 是 static 型变量,所以会在 3 的基础上减 3 使得输出结果为 0。20.若有以下程序:
44、#includeiostreamusing namespace std;class Apublic:A(int i,int j)a=i;b=j;void move(int x,int y)a+=x;b+=y;void show()couta“,“bendl;private:int a,b;class B:private Apublic:B(int i,int j):A(i,j)void fun()move(3,5);void fl()A:show();int main()B d(3,4);d.fun();d.fl();return 0;程序执行后的输出结果是( )。(分数:2.00)A.3,4
45、B.6,8C.6,9 D.4,3解析:解析 此题的执行过程如下:首先 B d(3,4);语句调用 B 类的构造函数:B(int i,int j),B 的构造函数中调用基类 A 的构造函数,使得 a=3,b=4;d.fun()会调用函数 move(3,5),使得(3,4)和(3,5)的对应部分分别相加,最后输出 6,9。21.下列有关拷贝构造函数的描述中错误的是( )。(分数:2.00)A.拷贝构造函数是一种构造函数B.拷贝构造函数与一般的构造函数一样,可以设置多个形参 C.每一个类中都必须有一个拷贝构造函数D.拷贝构造函数的功能是用一个已知对象去初始化一个正在创建的对象解析:解析 拷贝构造函数
46、是一个特殊的构造函数,它用一个己知的对象初始化一个正在创建的同类对象,它不能指定函数返回类型;只有一个参数,是同类的某个对象名的引用。每一个类中都必须有一个拷贝构造函数,如果类中未声明,编译器会目动生成一个公有的拷贝构造函数。22.有如下类的定义,横线处的语句是( )。class TestClass_ int x,y;public:TestClass(int a=0,int b=0)X=a:y=b;static void change()y-=10;y-=10;(分数:2.00)A.publicB.privateC.static D.protected解析:解析 因为 static void
47、change()为静态函数,静态函数主要访问静态数据,不访问非静态数据。所以函数中访问了数据 y,所以下划线的数据类型应对应为 static。23.下面叙述错误的是( )。(分数:2.00)A.派生类可以使用 private 派生B.对基类成员的访问必须是无二义性的C.基类成员的访问能力在派生类中维持不变 D.赋值兼容规则也适用于多继承的组合解析:解析 在建立派生类的时候,并不是简单地把基类的私有成员直接作为派生类的私有成员,把基类的公用成员直接作为派生类的公用成员。涉及如何确定基类的成员在派生类中的访问属性问题,不仅要考虑对基类成员所声明的访问属性,还要考虑派生类所声明的对基类的继承方式,根据这两个因素共同决定基类成员在派生类中的访问属性。所以本题选择 C)。24.下面的描述中,正确的是( )。(分数:2.00)A.virtual 可以用来声明虚函数 B.含有纯虚函数的类是不可以用来创建对象的,因为它是虚基类C.即使基类的构造函数没有参数,派生类也必须建立构造函数D.静态数据成员可以通过成员初始化列表来初始化解析:解析 在基类中用 vi