1、二级C+真题2007年9月答案真题 120一、选择题(每小题2分,共70分) 下列各题A、B、C、D 四个选项中,只有一个选项是正确的。第1题:参考答案:D答案解析:本题考查软件的定义。软件是计算机系统中与硬件相互依存的另一部分,它包括程序、相关数据及其说明文档的总和。因此,本题正确答案是选项D。第2题:参考答案:B答案解析:本题考查软件工程调试。调试与测试是两个不同的过程,有着根本的区别:调试是一个随机的、不可重复的过程,它用于隔离和确认问题发生的原因,然后修改软件来纠正问题:测试是一个有计划的,可以重复的过程,它的目的是为了发现软件中的问题。因此,软件调试的目的是为了改正软件中的错误。本题
2、的正确答案是选项B。第3题:参考答案:C答案解析:通常认为;面向对象方法具有封装性、继承性、多态性几大特点,就是这几大特点,为软件开发提供了一种新的方法学。 封装性:所谓封装就是将相关的信息、操作与处理融合在一个内含的部件中(对象中)。简单地说,封装就是隐藏信息。这是面向对象方法的中心,也是面向对象程序设计的基础。 继承性:子类具有派生它的类的全部属性(数据)和方法,而根据某一类建立的对象也都具有该类的全部,这就是继承性。继承性自动在类与子类间共享功能与数据,当某个类作了某项修改,其子类会自动改变,子类会继承其父类所有特性与行为模式。继承有利于提高软件开发效率,容易达到一致性。 多态性:多态性
3、就是多种形式。不同的对象在接收到相同的消息时,采用不同的动作。例如,一个应用程序包括许多对象,这些对象也许具有同一类型的工作,但是却以不同的做法来实现。不必为每个对象的过程取一过程名,造成复杂化,可以使过程名复用。同一类型的工作有相同的过程名,这种技术称为多态性。 经过上述分析可知,在面向对象方法中,实现信息隐蔽是依靠对象的封装。正确答案是选项C。第4题:参考答案:A答案解析:本题考查软件工程的程序设计风格。软件在编码阶段,力求程序语句简单、直接,不能只为了追求效率而使语句复杂化。除非对效率有特殊的要求,程序编写要做到清晰第一、效率第二。 人们在软件生存期要经常阅读程序,特别是在软件测试和维护
4、阶段,编写程序的人和参与测试、维护的人都要阅读程序,因此要求程序的可读性要好。 正确的注释能够帮助读者理解程序,可为后续阶段进行测试和维护提供明确的指导。所以注释不是可有可无的,而是必须的,它对于理解程序具有重要的作用。 I/O信息是与用户的使用直接相关的,因此它的格式应当尽可能方便用户的使用。在以交互式进行输入/输出时,要在屏幕上使用提示符明确提示输入的请求,指明可使用选项的种类和取值范围。 经过上述分析可知,选项A是不符合良好程序设计风格要求的。第5题:参考答案:A答案解析:本题考查程序效率。程序效率是指程序运行速度和程序占用的存储空间。影响程序效率的因素是多方面的,包括程序的设计、使用的
5、算法、数据的存储结构等。在确定数据逻辑结构的基础上,选择一种合适的存储结构,可以使得数据操作所花费的时间少,占用的存储空间少,即提高程序的效率。因此,本题选项A的说法是正确的。第6题:参考答案:D答案解析:本题考查数据结构的基本知识。 数据之间的相互关系称为逻辑结构。通常分为四类基本逻辑结构,即集合、线性结构、树型结构、图状结构或网状结构。存储结构是逻辑结构在存储器中的映象,它包含数据元素的映象和关系的映象。存储结构在计算机中有两种,即顺序存储结构和链式存储结构。顺序存储结构是把数据元素存储在一块连续地址空间的内存中;链式存储结构是使用指针把相互直接关联的节点链接起来。因此,这两种存储结构都是
6、线性的。可见,逻辑结构和存储结构不是一一对应的。因此,选项A和选项B的说法都是错误的。 无论数据的逻辑结构是线性的还是非线性的,只能选择顺序存储结构或链式存储结构来实现存储。程序设计语言中,数组是内存中一段连续的地址空间,可看作是顺序存储结构。可以用数组来实现树型逻辑结构的存储,比如二叉树。因此,选项C的说法是错误的。第7题:参考答案:C答案解析:冒泡排序的基本思想是:将相邻的两个元素进行比较,如果反序,则交换;对于一个待排序的序列,经一趟排序后,最大值的元素移动到最后的位置,其它值较大的元素也向最终位置移动,此过程称为一趟冒泡。对于有n个数据的序列,共需n-1趟排序,第i趟对从1到n-i个数
7、据进行比较、交换。冒泡排序的最坏情况是待排序序列逆序,第1趟比较n-1次,第2趟比较n-2次,依此类推,最后一趟比较 1次,一共进行n-1趟排序。因此,冒泡排序在最坏情况下的比较次数是 (n-1)+(n-2)+1,结果为n(n-1)/2。本题的正确答案是选项C。第8题:参考答案:A答案解析:本题考查数据结构中二叉树的性质。二叉树满足如下一条性质,即:对任意一棵二叉树,若终端结点(即叶子结点)数为n0,而其度数为2的结点数为n2,则n0=n2+1。 根据这条性质可知,若二叉树中有70个叶子结点,则其度为2的结点数为70-1,即69个。二叉树的总结点数是度为2、度为1和叶子结点的总和,因此,题目中
8、的二叉树总结点数为69+80+70,即219。因此,本题的正确答案是选项A。第9题:参考答案:B答案解析:本题考查数据库系统的基本概念和知识。 数据库系统除了数据库管理软件之外,还必须有其他相关软件的支持。这些软件包括操作系统、编译系统、应用软件开发工具等。对于大型的多用户数据库系统和网络数据库系统,还需要多用户系统软件和网络系统软件的支持。因此,选项A的说法是错误的。 数据库可以看成是长期存储在计算机内的、大量的、有结构的和可共享的数据集合。因此,数据库具有为各种用户所共享的特点。不同的用户可以使用同一个数据库,可以取出它们所需要的子集,而且容许子集任意重叠。数据库的根本目标是要解决数据的共
9、享问题。因此,选项B的说法是正确的。通常将引入数据库技术的计算机系统称为数据库系统。一个数据库系统通常由五个部分组成,包括相关计算机的硬件、数据库集合、数据库管理系统、相关软件和人员。因此,选项C的说法是错误的。因此,本题的正确答案是选项B。第10题:参考答案:C答案解析:本题考查数据库的关系模型。关系模型的数据结构是一个“二维表”,每个二维表可称为一个关系,每个关系有一个关系名。表中的一行称为一个元组;表中的列称为属性,每一列有一个属性名。表中的每一个元组是属性值的集合,属性是关系二维表中最小的单位,它不能再被划分。关系模式是指一个关系的属性名表,即二维表的表框架。因此,选项C的说法是正确的
10、。第11题:参考答案:A答案解析:本题考查的知识点是:存储类型。C+中变量的存储类型分为如下几种类型: (1)auto函数内部的局部变量(auto可省略不写)。 (2)static静态存储分配,又分为内部和外部静态。 (3)extern全局变量(用于外部变量说明)。 (4)register变量存储在硬件寄存器中。 故本题应该选择A。第12题:参考答案:B答案解析:本题考查的知识点是:构造函数。如果一个类中没有定义任何构造函数,编译器将生成一个不带参数的公有缺省构造函数。但只要定义了一个任意的构造函数,就不会生成缺省构造函数了。故本题应该选择B。第13题:参考答案:D答案解析:本题考查的知识点是
11、:基类成员在派生类中的访问属性。派生类中的成员不能访问基类中的私有成员,可以访问基类中的公有成员和保护成员。此时派生类对基类中各成员的访问能力与继承方式无关,但继承方式将影响基类成员在派生类中 的访问控制属性,基类中公有成员和保护成员在派生类中的访问属性将随着继承方式而改变:派生类从基类公有继承时,基类的公有成员和保护成员在派生类中仍然是公有成员和保护成员;派生类从基类私有继承时,基类的公有成员和保护成员在派生类中都改变为私有成员;派生类从基类保护继承时,基类的公有成员在派生类中改变为保护成员,基类的保护成员在派生类中仍为保护成员。故本题应该选择D。第14题:参考答案:D答案解析:本题考查的知
12、识点是:运算符“-”的重载。“-”运算符有一元(取负)和二元(减法)两种形式,且均可重载为成员函数和非成员函数。运算符重载为成员函数时,形参个数一般为运算符元数减1,因为此成员函数所属的对象可成为运算符的一个运算分量。重载为非成员函数时,形参个数一般和运算符元数相等。所以“-”运算符重载为成员函数时,参数个数可以是0个和1个,而重载为非成员函数时,参数个数可以是1个或2个。所以题目中的选项D,肯定是重载为非成员函数。故本题应该选择D。第15题:参考答案:C答案解析:本题考查的知识点是:模板。在C+语言中,模板只有两类:函数模板和类模板。故本题应该选择C。第16题:参考答案:A答案解析:本题考查
13、的知识点是:C+流。 利用C+流既可以进行有格式输入输出,也可以进行无格式输入输出,故选项B不正确。 C+流有4个预定义的流对象,它们的名称及与之联系的I/0设备如下: cin 标准输入 cout 标准输出 cerr 标准出错信息输出 clog 带缓冲的标准出错信息输出 故选项C不正确。 C+流除了可以使用提取“”插入“”进行输入输出外,还可以通过流对象的一些成员函数进行输入输出,例如:get()、getline()、putback()等。故选项D不正确。 综上所述,本题应该选择A。第17题:参考答案:D答案解析:本题考查的知识点是:C+关键字。 解答此类问题没有什么捷径,只能凭考生对C+语言
14、的熟悉或者死背C+关键字表。不过有一点要注意:C+关键字全部是由小写字母和下划线组成,如果见到有大写字母出现,那就肯定不是关键字。 friend是声明友元函数或右元类时用到的关键字; namespace是定义或使用名字空间时用到的关键字: continue是终止本次循环直接开始下一次循环所用到的关键字; byte是字节的意思,它不是C+关键字,在C+中表示字节的是char。 综上所述,本题应该选择D。第18题:参考答案:B答案解析:本题考查的知识点是;基本类型的派生类型。C+语言中,基本类型的字长及其取值范围可以放大和缩小,改变后的类型就叫做基本类型的派生类型。派生类型声明符是由基本类型关键字
15、char、int、float、double前面加上类型修饰符组成的。类型修饰符包括:short短类型,缩短字长:long长类型,加长字长;signed有符号类型,取值范围包括正负值:unsigned无符号类型,取值范围只包括正值。其中signed和unsigned只能同时出现一个,如果省略则默认为signed。short和long也只能同时出现一个,如果修饰的类型是int,则可以省略int。由此可见,选项A中,unsigned long int的省略形式为unsigned long;选项B中,signed short int的省略形式就是short,正确;选项C中,unsigned short
16、 int的省略形式是unsigned short:选项D中,short int的省略形式是short。故本题应该选择B。第19题:参考答案:D答案解析:本题考查的知识点是;语句块和函数。if语句的分支和循环语句的循环体可以是一条语句也可以是一个语句块,所以不是必须用一对大括号括起来;switch语句中的case标号语句可以是一系列语句,也可以包含语句块,也不是必须用一对大括号括起来:函数的函数体必须使用一对大括号括起来。故本题应该选择D。第20题:参考答案:A答案解析:本题考查的知识点是:指针的赋值。题目中的语句int*p=&k;有两个作用:首先,定义了一个int型指针p;然后,将变量k的地址
17、&k赋给刚定义的指针p。所以等效的语句序列为:int*p;p=&k;,应该选择A。第21题:参考答案:C答案解析:本题考查的知识点是:函数重载。在C+语言中,允许定义一系列函数名相同,但形参的个数或类型不完全相同函数。这种定义就叫做函数的重载。重载函数对返回值类型不作要求,返回值类型也不参与区分函数的重载形式。故本题应该选择C。第22题:参考答案:C答案解析:本题考查的知识点是,this指针。this指针是一个隐含的指针,它隐含于每个类的非静态成员函数中,它明确地表示出了成员函数当前操作的数据所属的对象。题目中,只有f3()满足“类的非静态成员函数”的要求,故本题应该选择C。第23题:参考答案
18、:C答案解析:本题考查的知识点是:派生类对基类成员的访问。派生类对基类中各成员的访问能力与继承方式无关,其成员不能访问基类中的私有成员,可以访问基类中的公有成员和保护成员。第24题:参考答案:A答案解析:本题考查的知识点是:运算符的重载。运算符重载为成员函数时,形参个数一般为运算符的元数减1,因为此成员函数所属的对象可成为运算符的一个运算分量。重载为非成员函数时,形参个数一般和运算符元数相等。所以,二元运算符重载为非成员函数时,参数表中应有两个参数,选项C不正确;运算符重载为成员函数时,若参数表中无参数,重载的是一元运算符,选项A是正确的。一元运算符中,“-”取负、“+”增1、“-”减1等运算
19、符均可重载为成员函数,故选项B不正确。 C+中,有“.”、“.*”、“-*”、“:”、“?:”五个运算符不能重载,故选项D不正确。本题应该选择A。第25题:参考答案:D答案解析:本题考查的知识点是:模板参数。模板参数是一种参数化的数据类型,在模板类或模板函数中,只要是使用数据类型的地方都能够使用模板参数来代表一种还未知的数据类型。所以,模板参数可以作为成员函数的局部变量类型。故本题应该选择D。第26题:参考答案:B答案解析:本题考查的知识点是:输入输出的格式控制。setw()控制的是输入输出的宽度:setfill()控制的是输出的填充字符。所以,本题的输出结果是*1234。故应该选择B。第27
20、题:参考答案:A答案解析:本题考查的知识点是:静态成员。对于类中的非静态数据成员,每一个类对象都拥有一个拷贝(副本),即每个对象的同名数据成员可以分别存储不同的数值,这是保证每个对象拥有区别于其他对象的特征的需要。而类中的静态成员则是解决同一个类的不同对象之间的数据和函数共享问题的。静态成员的特性是不管这个类创建了多少个对象,它的静态成员都只有一个拷贝(副本),这个副本被所有属于这个类的对象共享。这种共享与全局变量或全局函数相比,既没有破坏数据隐藏的原则,又保证了安全性。题目中,首先定义了一个obj对象,其构造函数使MyClass的静态数据成员count增1,所以第一条输出语句输出的结果是1。
21、然后通过指针动态创建了一个MyClass类的对象,构造函数再次被调用,count变为2,所以第2次输出结果是2。接下来是用delete删除了刚才动态创建的MyClass对象,析构函数被调用,count减1变为1,第3次输出1。故本题的输出为121,选项A正确。第28题:参考答案:C答案解析:本题考查的知识点是:常成员函数的重载。使用const关键字说明的成员函数称为常成员函数。const关键字可以用于参与对重载函数的区分。重载的原则是:常对象调用常成员函数,一般对象调用一般成员函数。题目中的Print()就是通过const重载的两个成员函数,主函数中声明的obj1是常对象,而obj2是一般对象
22、。故输出结果为const:val=10 val=20,应该选择C。第29题:参考答案:B答案解析:本题考查的知识点是:类的构造与析构。建立一个类的对象时,构造函数的执行顺序如下: 执行基类的构造函数,调用顺序按照各个基类被继承时声明的顺序(自左向右); 执行成员对象的构造函数,调用顺序按照各个成员对象在类中声明的顺序(自上而下:(如果一行声明了多个对象,则还要遵循自左向右) 执行自身的构造函数。 析构顺序与之相反。本题的Whole类没有基类,但有两个Part类的成员p1和p2。根据它们定义的顺序,应该先构造p1再构造p2,而不是按Whole的构造函数中初始化列表的顺序那样构造。所以,第1个被构
23、造的是p1(y),输出一个2;第2个被构造的是p2(x),输出一个1;最后调用自身构造函数,输出val的值3。析构函数严格与之相反。故输出结果为213312,本题应该选择B。第30题:参考答案:D答案解析:本题考查的知识点是:类的构造。建立一个类的对象时,构造函数的执行顺序如下: 执行基类的构造函数,调用顺序按照各个基类被继承时声明的顺序(自左向右); 执行成员对象的构造函数,调用顺序按照各个成员对象在类中声明的顺序(自上而下):(如果一行声明了多个对象,则还要遵循自左向右) 执行自身的构造函数。 本题Derived类继承于Base类,所以首先会构造基类Base,但Derived类的构造函数没
24、有初始化列表,所以将调用Base类的默认构造函数,输出一个0。接下来由于它的成员中还定义了一个Base类的对象,而构造函数也没有显示初始化这个对象,所以再次调用Base类的默认构造函数输出一个0。最后构造自身,因为主函数中传入了构造参数1,所以构造自身时输出了一个1。故最终输出结果为001,应该选择 D。第31题:参考答案:C答案解析:本题考查的知识点是:基类成员在派生类中的访问属性。基类中公有成员和保护成员在派生类中的访问属性将随着继承方式而改变:派生类从基类公有继承时,基类的公有成员和保护成员在派生类中仍然是公有成员和保护成员:派生类从基类私有继承时,基类的公有成员和保护成员在派生类中都改
25、变为私有成员;派生类从基类保护继承时,基类的公有成员在派生类中改变为保护成员,基类的保护成员在派生类中仍为保护成员。本题中,D类从B类公有继承,B类中fun1()为私有、fun2()为公有、varl为保护,公有继承到D类后fun1()不可访问、fun2()仍为公有、varl仍为保护。D类自身的fun3()是保护属性。所以综上所述,只有从B类继承的fun2()为公有属性,故本题应该选择C。第32题:参考答案:B答案解析:本题考查的知识点是:虚函数与多态性。在成员函数声明的前面加上virtual修饰,即把该函数声明为虚函数。在C+中,一个基类指针(或引用)可以用于指向它的派生类对象,而且通过这样的
26、指针(或引用)调用虚函数时,被调用的是该指针(或引用)实际所指向的对象类的那个重定义版本。本题中,就是通过基类Base的指针ptr指向new出来的派生类Derived对象,从基类的定义中可以看出,output()函数是普通成员函数,而Print()函数是虚函数。所以,通过ptr指针调用的output()是基类中的output(),而通过它调用的Print()则是派生类中的Print()。故本题的输出结果是1D,应该选择B。第33题:参考答案:A答案解析:本题考查的知识点是:运算符重载。C+把重载的运算符视为特殊的函数,称为运算符函数。运算符重载就是函数重载的一种特殊情况。像对待一般重载函数一样
27、,编译系统能够依据使用运算符的不同环境,即参数(操作数)的数量或类型的差异,区分同一运算符的不同含义。本题中的选项A重载运算符“*”使用的形参是两个double,而系统中的“*”运算原本就能计算两个double,所以这违反了重载函数的原则,当执行a*b(a、b的类型均为double)这样的表达式时,系统不知道该执行默认的“乘法”还是用户自定义的运算符重载函数。故答案为选项A。第34题:参考答案:A答案解析:本题考查的知识点是:文件流。get()函数的作用是读入一个字符,所以调用它的应该是输入文件流ifstream对象f;put()函数的作用是输出一个字符,所以调用它的应该是输出文件流ofstr
28、eam对象t。故选项B和C可以排除。读入和输出的动作应该是有顺序的,首先读入然后才能输出。所以前一空应该填f.get(c),后一空填 t.put(c)。故本题应该选择A。第35题:参考答案:C答案解析:本题考查的知识点是:虚函数与多态性。在成员函数声明的前面加上virtual修饰,即把该函数声明为虚函数。在C+中,一个基类指针(或引用)可以用于指向它的派生类对象,而且通过这样的指针(或引用)调用虚函数时,被调用的是该指针(或引用)实际所指向的对象类的那个重定义版本。题目中,fun1()和fun2()的形参分别是基类的指针和引用,如果传入的实参是指向派生类对象的指针或派生类对象,则函数中调用的s
29、how()为派生类中的show(),否则为基类中的show()。给fun1()传入的实参是指向派生类对象的指针p,而给fun2()传入的实参是基类对象。所以 fun1()调用派生类D中的show()输出一个D字符,fun2()调用基类B中的show()输出一个B字符。fun3()由于形参为基类对象,所以无论传入的是基类对象还是派生类对象,函数中调用的show()始终为基类的版本,输出一个B字符。故最终输出结果为 DBB,应该选择C。二、填空题(每空2分,共30分)第36题:参考答案:正确性详细解答:本题考查软件工程中需求规格说明书的评审。衡量需求规格说明书好坏的标准按重要性次序排列为:正确性、
30、无歧义性、完全性、可验证性、一致性、可理解性、可修改性和可追踪性。因此,划线处应填入“正确性”。第37题:参考答案:白盒或White Box详细解答:本题考查软件工程的测试。测试一般有两种方法:黑盒测试和白盒测试。黑盒测试不考虑程序的内部逻辑结构和处理过程,只着眼于程序的外部特性。用黑盒测试来发现程序中的错误,必须用所有可能的输入数据来检查程序能否都能产生正确的输出。白盒测试是在了解程序内部结构和处理过程的基础上,对程序的所有路径进行测试,检查路径是否都能按预定要求正确工作。因此,划线处应填入“白盒”或“White Box”。第38题:参考答案:顺序详细解答:本题考查数据结构的队列。队列是一种
31、特殊的线性表,即限定在表的一端进行删除,在表的另一端进行插入操作的线性表。允许删除的一端叫做队头,允许插入的一端叫做队尾。线性表的存储结构主要分为顺序存储结构和链式存储结构。当队列用链式存储结构实现时,就称为链队列;当队列用顺序存储结构实现时,就称为循环表。因此,本题划线处应填入“顺序”。第39题:参考答案:ACBDFEHGP详细解答:本题考查数据结构中二叉树的遍历。根据对二叉树根的访问先后顺序不同,分别称为前序遍历、中序遍历和后序遍历。这三种遍历都是递归定义的,即在其子树中也按照同样的规律进行遍历。下面就是中序遍历方法的递归定义。 当二叉树的根不为空时,依次执行如下3个操作: (1)按中序遍
32、历左子树 (2)访问根结点 (3)按中序遍历右子树 根据如上前序遍历规则,来遍历本题中的二叉树。首先遍历F的左子树,同样按中序遍历。先遍历C的左子树,即结点A,然后访问C,接着访问C的右子树,同样按中序遍历C的右子树,先访问结点B,然后访问结点D,因为结点D没有右子树,因此遍历完C的右子树,以上就遍历完根结点F的左子树。然后访问根结点F,接下来遍历F的右子树,同样按中序遍历。首先访问E的左子树,E的左子树为空,则访问结点E,然后访问结点E的右子树,同样按中序遍历。首先访问G的左子树,即H,然后访问结点G,最后访问G的右子树P。以上就把整个二叉树遍历一遍,中序遍历的结果为ACBDFEHGP。因此
33、,划线处应填入“ACBDFEHGP”。第40题:参考答案:实体或 Entity详细解答:本题考查数据库的E-R图。E-R模型中,有三个基本的抽象概念:实体、联系和属性。E-R图是E-R模型的图形表示法,在E-R图中,用矩形框表示实体,菱形框表示联系,椭圆形框表示属性。因此,划线处应填入“实体”或“Entity”。第41题:参考答案:2详细解答:本题考查的知识点是:条件运算符。条件运算是C+中唯一的三目运算,与其对应的运算符?:称为条件运算符。条件运算符的使用格式为: 表达式1?表达式2:表达式3 当计算有条件运算符构成的表达式时,首先计算表达式1,若其值非0,则计算出 表达式2的值,并用这个值
34、作为整个表达式的值;若表达式1的值为0,则计算出表达式3的值,并用这个值作为整个表达式的值。题目中,ab的结果为假(即 0),所以整个表达式的值为b的值2。第42题:参考答案:6详细解答:本题考查的知识点是:for循环的嵌套。题目中外循环会循环3次,每次循环变量i的值分别为1、2、3。而内循环会循环i次,故3次执行内循环,循环的次数分别为1、2、3次。那么,sum总共被增1了6次。故最终sum的值为6。第43题:参考答案:4详细解答:本题考查的知识点是:局部静态变量。局部静态变量是在函数或语句块中以 static关键字定义的局部变量。其作用域虽然和普通局部变量一样只在函数或语句块中有效,但生存
35、周期却和全局变量一样,一直延续到程序结束。故第1次调用f(),静态局部变量s变为2。第2次调用f(),s又自增2,所以函数f的返回值是4。第44题:参考答案:(*p)详细解答:本题考查的知识点是:成员函数的调用。通过对象调用成员函数使用“.”运算符,而通过对象的指针调用成员函数则是用“-”运算符。本题中,Print()函数之前已经有一个“.”了,所以这里要填入的是一个对象。但题目中只定义了一个 MyClass类的指针p,所以此处应填入将指针转化为指针所指对象的表达式(*p)。第45题:参考答案:ABBA详细解答:第46题:参考答案:Base:fun()详细解答:本题考查的知识点是:派生类对基类
36、成员的访问。本题的派生类Derived覆盖了基类Base中的fun(),如需调用基类版本的fun(),则需要使用域运算符“:”。故应该填写Base:fun()。第47题:参考答案:virtual void display()=0;详细解答:本题考查的知识点是:纯虚函数。纯虚函数定义格式是在虚函数的后面加上“=0”。与虚函数不同的是,纯虚函数允许没有函数体。故本题应该填入的内容是;virtual void display()=0;。第48题:参考答案:real+c.real,imag+c.imag或this-real+c.real,this-imag+c.imag详细解答:本题考查的知识点是:运
37、算符重载。根据题目的要求,要实现类complex的重载加法运算符“+”。复数的加法是将其实部与虚部分别相加,因此空处应填入 real+c.real,imag+c.imag,这样就构造出一个临时的complex对象,并且它的实部和虚部分别为自身和形参c的实部与虚部之和,然后通过return语句返回这个结果。第49题:参考答案:-A()详细解答:本题考查的知识点是:类的构造与析构。本题要求的输出结果中包含aa,所以基类A中填空位置处的函数一定要被执行。但主函数中仅仅创建了一个B类对象,然后释放了它,并没有调用什么函数。所以可以肯定填空处一定是要定义基类的构造或者析构函数。如果定义的是构造,那么盼肯
38、定在new操作的时候就会被输出,而下面的bb是在析构函数中,会在delete时被输出。故可肯定应填入基类A的析构函数定义:-A()。第50题:参考答案:pListtop=item详细解答:本题考查的知识点是:堆栈数据结构。堆栈是一种先进后出的队列,每次入栈(存入数据)在栈顶,出栈(取出数据)也在栈顶,所以一个堆栈一般由一个数组加上一个栈顶指针(可以是指向数组元素的指针,也可以是指示数组下标位置的 int型变量)构成,本题的pList100和top就是。根据栈顶指针所指位置的差异,有两种情况要注意:一是,栈顶指针指向下一次入栈的位置,即栈顶指针所指位置是一个空位置,下次入栈直接存入栈顶指针所指位置,然后栈顶指针再增1。出栈则需先将栈顶指针减1,然后取出栈顶指针所指数据。二是,栈顶指针指向下一次出栈的位置,即栈顶指针所指位置是最后一个有效数据,下次出栈直接取出栈顶指针所指数据,然后栈顶指针再减1。入栈则需先将栈顶指针增1,然后将数据存入栈顶指针所指位置。从Pop()函数中可以看出,是先取数然后top才会减1,故属于后种情况。所以Push()函数应该先增1然后存数。增1题目已经给出,所以应填pListtop=item。更多试卷请见麦多课文库