1、二级 C+笔试 19及答案解析(总分:98.00,做题时间:90 分钟)一、B选择题/B(总题数:35,分数:70.00)1.C语言中 while循环和 do-while循环的主要区别是(分数:2.00)A.do-while的循环体至少无条件执行一次B.while的循环控制条件比 do-while的循环控制条件严格C.do-while允许从外部转到循环体内D.do-while的循环体不能是复合语句2.关于类模板,下列表述不正确的是(分数:2.00)A.用类模板定义一个对象时,不能省略实参B.类模板只能有虚拟类型参数C.类模板本身在编译中不会生成任何代码D.类模板的成员函数都是模板函数3.下列叙
2、述中正确的是(分数:2.00)A.线性表是线性结构B.栈与队列是非线性结构C.线性链表是非线性结构D.二叉树是线性结构4.设有以下程序段: int a5=0,*p,*q; p=a; q=a; 则下列选项中,合法的运算是(分数:2.00)A.p+qB.p-qC.p*qD.Pq5.下列叙述中正确的是(分数:2.00)A.在面向对象的程序设计中,各个对象之间具有密切的联系B.在面向对象的程序设计中,各个对象都是公用的C.在面向对象的程序设计中,各个对象之间相对独立,相互依赖性小D.上述三种说法都不对6.假定 MyClass为一个类,则该类的拷贝构造函数的声明语句为(分数:2.00)A.MyClass
3、 class Base public: Base() x=0; int x; ; class Derivedl: virtual public Base public: Derived1() x=10; ; class Derived2: virtual public Base publici Derived2() x=20; ; class Derived :public Derived1,protected Derived2 ; int main() Derived obj; coutobj.xend1; return 0; 该程序运行后的输出结果是(分数:2.00)A.20B.30C.1
4、0D.013.模板函数的真正代码是在( )时候产生。(分数:2.00)A.源程序中声明函数时B.源程序中定义函数时C.源程序中调用函数时D.运行执行函数时14.下列类的定义中,有( ) 处语法错误。 class Base public: Base() Base(int i) data=i; private: int data; ; class Derive: public Base public: Derive(): Base(O) Derive(int x) d=x; void setvalue(int i) data=i; private: d; ;(分数:2.00)A.1B.2C.3D.
5、415.派生类的构造函数的成员初始化列表中,不能包含(分数:2.00)A.基类的构造函数B.派生类中子对象的初始化C.基类的子对象初始化D.派生类中一般数据成员的初始化16.有以下程序: #includeiostream using namespace std; class sample private: int n; public: sample() sample(int m) n=m; sample add(sample s1,sample s2) this-n=s1.n+s2.n; return(*this); void disp() cout“n“nend1; ; int main()
6、 sample s1(10),s2(5),s3; s3add(s1,s2); s3disp(); return 0; 程序运行后,输出的结果是(分数:2.00)A.n=10B.n=5C.n=20D.n=1517.若有如下程序: #include iostream using namespaces std; int s=O; class sample static int n; public: sample(int i) n=i; static void add() s+=n; ; int sample:s=O; int main() sample a(2),b(5); sample: :add
7、(); coutsend1; return 0; 程序运行后的输出结果是(分数:2.00)A.2B.5C.7D.318.若执行语句:coutsetfill(*)setw(10)123“OK“end1 后将输出(分数:2.00)A.*1230KB.123*OKC.*123*OKD.123*OK*19.下列运算符中不能在 C中重载的是(分数:2.00)A.?:B.+C.-D.=20.下列叙述中错误的是(分数:2.00)A.在数据库设计的过程中,需求分析阶段必须考虑具体的计算机系统B.在数据库设计的过程中,概念结构设计与具体的数据库管理系统有关C.在数据库设计的过程中,逻辑结构设计与具体的数据库管理
8、系统有关D.在数据库设计的过程中,物理结构设计依赖于具体的计算机系统21.程序设计方法要求在程序设计过程中(分数:2.00)A.先编制出程序,经调试使程序运行结果正确后再画出程序的流程图B.先编制出程序,经调试使程序运行结果正确后再在程序中的适当位置处加注释C.先画出流程图,再根据流程图编制出程序,最后经调试使程序运行结果正确后再在程序中的适当位置处加注释D.以上三种说法都不对22.下面关于虚函数的描述中正确的是(分数:2.00)A.虚函数是一个静态成员函数B.虚函数是一个非成员函数C.虚函数既可以在函数说明时定义,也可以在函数实现时定义D.派生类的虚函数与基类中对应的虚函数具有相同的参数个数
9、和类型23.以下程序执行后的输出结果是 #includeiostream using namcspace std; void try(int,int,int,int); int main() int x,y,z,r; x=1; y=2; try(x,y,z,r); coutrend1; return 0; void try(int x,int y, int z,int r) z = x+y; x = x*x; y = y*y; r = z+x+y; (分数:2.00)A.18B.9C.10D.不确定24.下列对派生类的描述中,错误的是(分数:2.00)A.一个派生类可以作为另一个派生类的基类B
10、.派生类至少有一个基类C.派生类的成员除了它自己的成员外,还包含了它的基类的成员D.派生类中继承的基类成员的访问权限到派生类中保持不变25.已知:int n=10;那么下列语句中错误的是(分数:2.00)A.int*p=new long;B.int p;C.int*p=new long(;D.int p10;26.下列打开文件的表达式中,错误的是(分数:2.00)A.ofstream ofile;ofilopen(“C:/vc/abtxt“,ios:binar;B.fstream iofile;iofilopen(“abtxt“,ios:at;C.ifstream ifile (“C:/vc
11、/abtxt“);D.couopen(“C:/vc/abtxt“,ios:binar;27.设树 T的度为 4,其中度为 1,2,3,4 的结点个数分别为 4,2,1,1。则 T中的叶子结点数为(分数:2.00)A.5B.6C.7D.828.下述关于数据库系统的叙述中正确的是(分数:2.00)A.数据库系统减少了数据冗余B.数据库系统避免了一切冗余C.数据库系统中数据的一致性是指数据类型一致D.数据库系统比文件系统能管理更多的数据29.面向对象程序设计思想的主要特征中不包括(分数:2.00)A.继承性B.功能分解,逐步求精C.封装性和信息隐藏D.多态性30.下列叙述中正确的是(分数:2.00)
12、A.黑箱(盒)测试方法完全不考虑程序的内部结构和内部特征B.黑箱(盒)测试方法主要考虑程序的内部结构和内部特征C.白箱(盒)测试不考虑程序内部的逻辑结构D.上述三种说法都不对31.用树形结构来表示实体之间联系的模型称为(分数:2.00)A.关系模型B.层次模型C.网状模型D.数据模型32.有如下函数模板定义: templatetypename T1,typename T2,typename T3 T2 plus T1 t1,T3 t3)return t1+t3; 则以下调用中正确是(分数:2.00)A.plus(3,5;B.plus(3,5;C.plusint(3,5;D.plusint,do
13、uble(3,5;33.下面不属于软件设计原则的是(分数:2.00)A.抽象B.模块化C.自底向上D.信息隐蔽34.若有以下程序: #includeiostream using namespace std; class data public: int x; data(int x) data:x=x; ; class A private: data d1; public: A(int x):d1(x) void dispa() coutd1.X“,“; ; classB:public A private: data d2; public: B(int x):A(x-1),d2(x) void
14、dispb() coutd2.xend1; ; class C:public B public: C(int x):B(x-1) void disp() dispa(); dispb(); ; int main() C obj(5); obj.disp(); return 0; 程序执行后的输出结果是(分数:2.00)A.5,5B.4,5C.3,4D.4,335.若有以下程序: #includeiOStream using namespaces std; class A public: A() A(int i) x1=i; void dispa() cout“X1=“x1“,“: privat
15、e; int x1; ; class B:public A public: B() B(int i):A(i+10) x2=i; void dispb() dispa(); cout“x2=“x2end1; private: int x2; ; int main() B b(2); bdispb() return 0; 程序运行后的输出结果是( )。(分数:2.00)A.x1=10,x2=2B.x1=12,x2=10C.x1=12,x2=2D.x1=2,x2=2二、B填空题/B(总题数:14,分数:28.00)36.在一个容量为 25的循环队列中,若头指针 front=16,尾指针 rear=
16、9,则该循环队列中共有U 【1】 /U个元素。(分数:2.00)填空项 1:_37.在面向对象方法中,属性与操作相似的一组对象称为U 【2】 /U。(分数:2.00)填空项 1:_38.Jackson方法是一种面向U 【3】 /U的结构化方法。(分数:2.00)填空项 1:_39.一个项目具有一个项目主管,一个项目主管可管理多个项目。则实体集“项目主管”与实体集“项目”的联系属于U 【4】 /U的联系。(分数:2.00)填空项 1:_40.数据独立性分为逻辑独立性与物理独立性。当数据的存储结构改变时,其逻辑结构可以不变,所以,基于逻辑结构的应用程序不必修改,称为U 【5】 /U。(分数:2.0
17、0)填空项 1:_41.假设 a、b 均是整型变量,则表达式 a=2,b=5,a+,b+,a+b 值为U 【6】 /U。(分数:2.00)填空项 1:_42.设在主函数中有以下定义和函数调用语句,且 fun()函数为 void类型,请写出 fun()函数的首部U 【7】 /U。 int main() double s1022; int n; fun(s); return 0; (分数:2.00)填空项 1:_43.若有如下程序段: #includeiostream using namespace std; int main() char*p=“abcdefgh“,*r; long*q; q=(
18、long*)p;q+; r=(char*)q; coutrendl; return 0; 该程序的输出结果是U 【8】 /U。(分数:2.00)填空项 1:_44.表达式 c3=c1operator+(c2)或 c3=operator+(c1,c2)还可以表示为U 【9】 /U。(分数:2.00)填空项 1:_45.下列程序的输出结果是U 【10】 /U。 #includeiostream using namespace std; void fun (int class Base public: Base() x=0; int x; ; class Derivedl: virtual publ
19、ic Base public: Derived1() x=10; ; class Derived2: virtual public Base publici Derived2() x=20; ; class Derived :public Derived1,protected Derived2 ; int main() Derived obj; coutobj.xend1; return 0; 该程序运行后的输出结果是(分数:2.00)A.20 B.30C.10D.0解析:解析 本题考核虚基类的应用。本题中,虽然 Derived1和 Derived2都是由共同的基类 x派生而来的,但山于引入了
20、虚基类,使得它们分别对应基类的不同副本。这时数据成员 x只存在一份拷贝,不论在类 Derived1修改,还是在类 Derived2中修改, 都是直接对这惟一拷贝进行操作。本题程序执行语句“Derived obj”时,就会先调用虚基类 Base的构造函数,使得 x=0,然后执行类 Derived1的构造函数使得 x=10,再执行类 Derived2的构造函数,使得 x=20。最后输出 x的值为 20。13.模板函数的真正代码是在( )时候产生。(分数:2.00)A.源程序中声明函数时B.源程序中定义函数时C.源程序中调用函数时 D.运行执行函数时解析:解析 本题考核模板函数的使用。在说明一个函数
21、模板后,当编译系统发现有一个对应的函数调用时,将根据实参中的类型来确认是否匹配函数模板中对象的形参,然后生成一个重载函数。由此可知模板函数的真正代码是在函数调用时产生的。14.下列类的定义中,有( ) 处语法错误。 class Base public: Base() Base(int i) data=i; private: int data; ; class Derive: public Base public: Derive(): Base(O) Derive(int x) d=x; void setvalue(int i) data=i; private: d; ;(分数:2.00)A.1
22、B.2 C.3D.4解析:解析 本题考核派生类的定义和成员的访问权限。第一处错误:在派生类的构造函数 Derive(int x)中没有调用基类的构造函数对基类对象初始化:第二处错误:数据 data是基类 Base的私有成员,派生类 Derive不能访问,所以在函数 setvalue中对 data的赋值是错误的。15.派生类的构造函数的成员初始化列表中,不能包含(分数:2.00)A.基类的构造函数B.派生类中子对象的初始化C.基类的子对象初始化 D.派生类中一般数据成员的初始化解析:解析 本题考核构造函数。在 C中,构造函数不能被继承,因此,派生类的构造函数必须通过调用基类的构造函数来初始化基类
23、子对象。所以,在定义派生类的构造函数时,除了对自己的数据成员进行初始化外,还必须负责调用基类构造函数使基类的数据成员得以初始化。如果派生类中还有子对象,还应包含对于对象初始化的构造函数。但是它不负责基类中子对象的初始化。16.有以下程序: #includeiostream using namespace std; class sample private: int n; public: sample() sample(int m) n=m; sample add(sample s1,sample s2) this-n=s1.n+s2.n; return(*this); void disp()
24、cout“n“nend1; ; int main() sample s1(10),s2(5),s3; s3add(s1,s2); s3disp(); return 0; 程序运行后,输出的结果是(分数:2.00)A.n=10B.n=5C.n=20D.n=15 解析:解析 本题考核 this指针的使用。类成员函数 add中通过 this指针实现私有数据成员 n的赋值。17.若有如下程序: #include iostream using namespaces std; int s=O; class sample static int n; public: sample(int i) n=i; st
25、atic void add() s+=n; ; int sample:s=O; int main() sample a(2),b(5); sample: :add(); coutsend1; return 0; 程序运行后的输出结果是(分数:2.00)A.2B.5 C.7D.3解析:解析 本题考核静态数据成员和静态成员函数的应用。程序中定义一个类 sample,它包括一个静态数据成员 n和一个静态成员函数 add,并在类的构造函数中给类私有静态数据成员 n赋值。 在主函数main中,定义对象 a(2)时,通过构造函数使静态数据成员 n的值变为 2,在定义对象 b(5)时,通过构造函数使静态数据
26、成员 n=5(覆盖了前面的 n=2),再执行 sample:add()使全局变量 s=5。18.若执行语句:coutsetfill(*)setw(10)123“OK“end1 后将输出(分数:2.00)A.*1230K B.123*OKC.*123*OKD.123*OK*解析:解析 本题考核格式控制数据的输入输出。函数 setfill (char C) 用于设置填充字符,在输出数据时,如果数据宽度小于设置的宽度,则空闲位置要用填充字符填满。函数 setw(int n)用于设置输入输出宽度,宽度设置的效果只对一次输入或输出有效,在完成一次数据的输出或输入后,宽度设置自动恢复为 0,例如题中语句以
27、宽度 10输出数据“123”后,字符串“OK的输出宽度就自动恢复为 0了。而且输出的初始状态为右对齐,所以最终的输出为*123OK。19.下列运算符中不能在 C中重载的是(分数:2.00)A.?: B.+C.-D.=解析:解析 本题考核运算符的重载。C+中,“:、*、.、?:”这 4个运算符不能重载。20.下列叙述中错误的是(分数:2.00)A.在数据库设计的过程中,需求分析阶段必须考虑具体的计算机系统B.在数据库设计的过程中,概念结构设计与具体的数据库管理系统有关 C.在数据库设计的过程中,逻辑结构设计与具体的数据库管理系统有关D.在数据库设计的过程中,物理结构设计依赖于具体的计算机系统解析
28、:解析 数据库设计主要分四个步骤:需求分析,概念结构设计,逻辑结构设计,物理结构设计。 选项 B错误,应为所选,因为概念结构设计在需求分析的基础上对客观世界做抽象,独立于数据库的逻辑结构,也独立于具体的数据库管理系统,与具体的数据库管理系统无关。21.程序设计方法要求在程序设计过程中(分数:2.00)A.先编制出程序,经调试使程序运行结果正确后再画出程序的流程图B.先编制出程序,经调试使程序运行结果正确后再在程序中的适当位置处加注释C.先画出流程图,再根据流程图编制出程序,最后经调试使程序运行结果正确后再在程序中的适当位置处加注释D.以上三种说法都不对 解析:解析 程序设计的过程应是先画出流程
29、图,然后根据流程图编制出程序,所以选项 A错误。 程序中的注释是为了提高程序的可读性,使程序易于理解、易于维护,注释必须在编制程序的同时加入,所以,选项 B和 C错误。本题的正确答案为 D。22.下面关于虚函数的描述中正确的是(分数:2.00)A.虚函数是一个静态成员函数B.虚函数是一个非成员函数C.虚函数既可以在函数说明时定义,也可以在函数实现时定义D.派生类的虚函数与基类中对应的虚函数具有相同的参数个数和类型 解析:解析 本题考核虚函数的概念。虚函数是非静态的成员函数,它不能是友元函数,但可以在另一个类中被声明为友元函数。所以 A) 选项不正确;虚函数必须是类的成员函数,所以 B) 选项是
30、错误的:虚函数声明只能出现在类定义的函数原型声明中,而不能在成员函数的函数体实现的地方,所以 C) 选项是不正确的:一般要求基类中说明了虚函数后,派生类说明的虚函数应该与基类中虚函数的参数个数相等,对应参数的类型相同。如果不相同,则将派生类虚函数的参数类型强制转换为基类中虚函数的参数类型。故 D) 选项的说法是正确的。23.以下程序执行后的输出结果是 #includeiostream using namcspace std; void try(int,int,int,int); int main() int x,y,z,r; x=1; y=2; try(x,y,z,r); coutrend1;
31、 return 0; void try(int x,int y, int z,int r) z = x+y; x = x*x; y = y*y; r = z+x+y; (分数:2.00)A.18B.9C.10D.不确定 解析:解析 本题考核函数调用(参数的传递)。本题常见的错误解答是:把 x=1,y=2 代入到函数 try中,逐步计算出 r=8。最后得到 r的输出值是 8。以下是正确解答,根据程序逐步分析:程序中定义了一个名为 try的 void型函数,即函数 try没有任何返回值。而 try函数在 main函数中是以一条独立语句的方式被调用的,且 main函数最后输出变量 r的值。但在 ma
32、in函数中,并没有对变量 r赋值。在 C语言中,数据只能从实参单向传递给形参,称为按值传递。也就是说,当简单变量作为实参时,用户不能在函数中改变对应实参的值。所以虽然在函数 try中,r 的值为 8,但它并不能传递给实参,当然最终的输出肯定是不确定的随机数了。24.下列对派生类的描述中,错误的是(分数:2.00)A.一个派生类可以作为另一个派生类的基类B.派生类至少有一个基类C.派生类的成员除了它自己的成员外,还包含了它的基类的成员D.派生类中继承的基类成员的访问权限到派生类中保持不变 解析:解析 本题考核继承与派生。基类与,派生类的关系为:基类是对派生类的抽象,派生类是对基类的具体化。基类抽
33、取了它的派生类的公共特征,而派生类通过增加信息将抽象的基类变为某种有用的类型,派生类是基类定义的延续。派生类是基类的组合。公有派生类的对象可以作为基类的对象处理。由此可知 A) 、B) 和 C) 选项都是正确的。而在继承中,采用不同的继承方式,将限制派生类对基类成员的访问。所以 D) 选项是错误的。25.已知:int n=10;那么下列语句中错误的是(分数:2.00)A.int*p=new long;B.int p; C.int*p=new long(;D.int p10;解析:解析 本题考核指针、数组和 new运算符。运算符 new用于动态申请存储空间,它的操作数为某种数据类型且可以带有初值
34、表达式或元素个数,若带初值,则其表达式为:指针=new类型(初值),例如 C选项所示,若带有元素个数,则其语法格式为:指针=new类型元素个数,例如 A选项所示。数组定义中数组大小必须为常量,而 B) 选项中的 n为一变量所以是错误的。26.下列打开文件的表达式中,错误的是(分数:2.00)A.ofstream ofile;ofilopen(“C:/vc/abtxt“,ios:binar;B.fstream iofile;iofilopen(“abtxt“,ios:at;C.ifstream ifile (“C:/vc /abtxt“);D.couopen(“C:/vc/abtxt“,ios:
35、binar; 解析:解析 本题考核文件的 I/0操作。流可以分为 3类:输入流、输出流以及输入/输出流,相应地必须将流说明为 ifstream、ofstream 以及 fstream 类的对象。如,说明一个输入流对象:ifstream ifile;。说明了流对象后,可使用函数 open()打开文件。文件的打开即是在流与文件之间建立一个连接。open()的函数原型为:void open(const char*filename, int mode,int port=filebuf:openprot);其中,filename 是文件名字,它可包含路径说明。mode 说明文件的打开模式。除了 open
36、()成员函数外,ifstream、ofstream 以及 fstream三类流的构造函数也可以打开文件,其参数同 open()函数。例如:ifstream ifile(“c:/vc/abc.txt“);。打开的文件使用完毕后,必须使用 close()函数将其关闭。close()函数也是流类的成员函数,它没有参数与返回值,其作用是将缓冲区的内容刷新并撤销流与文件之间的连接。当流对象的生存周期后,相应的析构函数也会将文件关闭。由此可知,A) 、B) 和 C) 选项的表达式都是正确的。对于 D) 选项,由于 open函数并不是 cout对象中的成员函数,所以对 open的调用是非法的。27.设树 T
37、的度为 4,其中度为 1,2,3,4 的结点个数分别为 4,2,1,1。则 T中的叶子结点数为(分数:2.00)A.5B.6C.7D.8 解析:解析 根据给定的条件,在树中,各结点的分支总数为:41+22+13+41=15:树中的总结点数为:15(各结点的分支总数)+1(根结点)=16:非叶子结点总数为: 4+2+1+1=8。因此,叶子结点数为16(总结点数)-8(非叶子结点总数)=8。因此,本题的正确答案为 D。28.下述关于数据库系统的叙述中正确的是(分数:2.00)A.数据库系统减少了数据冗余 B.数据库系统避免了一切冗余C.数据库系统中数据的一致性是指数据类型一致D.数据库系统比文件系
38、统能管理更多的数据解析:解析 数据库是一个通用化的、综合性的数据集合,它可以为各种用户所共享,具有最小的冗余度和较高的数据与程序的独立性,而且能并发地为多个应用服务,同时具有安全性和完整性。即数据库系统减少了数据冗余,但不能避免一切冗余。所以选项 A正确,选项 B错误。 在数据库管理阶段中,数据是结构化的,面向系统,数据冗余度小,从而节省了数据的存储空间,也减少了对数据的存取时间,提高了访问效率,避免了数据的不一致性。数据的不一致性,是指对数据的存取方式,选项 C错误。 数据库系统比文件系统能管理更多的数据,并非是数据库系统的特点,选项 D错误。本题正确答案是 A。29.面向对象程序设计思想的
39、主要特征中不包括(分数:2.00)A.继承性B.功能分解,逐步求精 C.封装性和信息隐藏D.多态性解析:解析C+是一种面向对象的程序设计语言,它充分支持面向对象思想中的 3个主要特征:封装性、继承性、多态性。B 选项所描述是结构化程序设计的思想。30.下列叙述中正确的是(分数:2.00)A.黑箱(盒)测试方法完全不考虑程序的内部结构和内部特征 B.黑箱(盒)测试方法主要考虑程序的内部结构和内部特征C.白箱(盒)测试不考虑程序内部的逻辑结构D.上述三种说法都不对解析:解析 黑箱测试方法完全不考虑程序的内部结构和内部特征,而只是根据程序功能导出测试用例,选项 A是正确的,选项 B错误。 白箱测试是
40、根据对程序内部逻辑结构的分析来选取测试用例,选项 C错误。正确答案为 A。31.用树形结构来表示实体之间联系的模型称为(分数:2.00)A.关系模型B.层次模型 C.网状模型D.数据模型解析:解析 在数据库系统中,由于采用的数据模型不同,相应的数据库管理系统 (DBMS)也不同。目前常用的数据模型有 3种:层次模型、网状模型和关系模型。在层次模型中,实体之间的联系是用树结构来表示的,其中实体集(记录型)是树中的结点,而树中各结点之间的连线表示它们之间的关系。所以,本题的正确答案是 B。32.有如下函数模板定义: templatetypename T1,typename T2,typename
41、T3 T2 plus T1 t1,T3 t3)return t1+t3; 则以下调用中正确是(分数:2.00)A.plus(3,5;B.plus(3,5;C.plusint(3,5;D.plusint,double(3,5; 解析:解析 本题考核函数模板的使用。C+中对函数模板的调用有时候只使用了函数实参,而没有使用模板实参,模板实参都被省略了,但模板实参的省略并不是必然的,而是有条件。模板实参不能省略的情况有:从模板函数实参表获得的信息有矛盾:需要获得特定类型的返回值,而不管参数的类型如何:虚拟类型参数没有出现在模板函数的形参中;函数模板含有常规形参。题中定义的函数模板中虚拟类型参数T2没有
42、出现在模板函数的形参列表中,所以在调用时不能省略,D 选项的调用省略了 T3,这是允许的。33.下面不属于软件设计原则的是(分数:2.00)A.抽象B.模块化C.自底向上 D.信息隐蔽解析:解析 软件设计遵循软件工程的基本目标和原则,建立了适用于在软件设计中应该遵循的基本原理和与软件设计有关的概念。它们是:抽象、模块化、信息隐蔽、模块独立性。没有自底向上,所以,本题的正确答案是 C。34.若有以下程序: #includeiostream using namespace std; class data public: int x; data(int x) data:x=x; ; class A
43、private: data d1; public: A(int x):d1(x) void dispa() coutd1.X“,“; ; classB:public A private: data d2; public: B(int x):A(x-1),d2(x) void dispb() coutd2.xend1; ; class C:public B public: C(int x):B(x-1) void disp() dispa(); dispb(); ; int main() C obj(5); obj.disp(); return 0; 程序执行后的输出结果是(分数:2.00)A.
44、5,5B.4,5C.3,4 D.4,3解析:解析 本题考核派生类的定义和访问权限。本题涉及多层次的继承关系。类 B是类 A的派生类,类 C又是类 B的派生类。类 C中的构造函数调用了类 B的构造函数来初始化类 B的私有数据成员,而类 B的构造函数又调用了类 A的构造函数来初始化类 A的私有数据成员。由此可知,程序最后的输出为 3,4。35.若有以下程序: #includeiOStream using namespaces std; class A public: A() A(int i) x1=i; void dispa() cout“X1=“x1“,“: private; int x1; ;
45、 class B:public A public: B() B(int i):A(i+10) x2=i; void dispb() dispa(); cout“x2=“x2end1; private: int x2; ; int main() B b(2); bdispb() return 0; 程序运行后的输出结果是( )。(分数:2.00)A.x1=10,x2=2B.x1=12,x2=10C.x1=12,x2=2 D.x1=2,x2=2解析:解析 本题考核派生类的构造函数。在 C+中,构造函数不能被继承,因此,派生类的构造函数必须通过调用基类的构造函数来初始化基类子对象。所以,在定义派生类
46、的构造函数时,除了对自己的数据成员进行初始化外,还必须负责调用基类构造函数使基类的数据成员得以初始化。如果派生类中还有子对象,还应包含对于对象初始化的构造函数。二、B填空题/B(总题数:14,分数:28.00)36.在一个容量为 25的循环队列中,若头指针 front=16,尾指针 rear=9,则该循环队列中共有U 【1】 /U个元素。(分数:2.00)填空项 1:_ (正确答案:18)解析:解析 设循环队列的容量为 n。 若 rearfront,则循环队列中的元素个数为 rear-front: 若rearfront,则循环队列中的元素个数为 n+(rear-front)。 题中, fiont=16,rear=9, 即rearfront, 所以, 循环队列中的元素个数为 m+(rear-front)=25+(9-16)=18。37.在面向对象方法中,属性与操作相似的一组对象称为U 【2】 /U。(分数:2.00)填空项 1:_ (正确答案:类)解析:解析 在面向对象方法中,类描述的是具有相似性质的一组对象。所以,属性与操作相似的一组对象称为类